2013-12-15 20 views
1

我想知道是否可能只有查询结果显示在列表中返回的值。只显示查询后的列表中的值mongodb

我运行的是以下几点:

a = ast.literal_eval(json.dumps(list(db.bastion.find({ },{ 'counter': 1, '_id': False })))) 

它返回类似这样:

[{'counter': 10447}, {'counter': 25375}, {'counter': 11963}, {'counter': 17297}, 
{'counter': 5893}, {'counter': 19955}, {'counter': 5159}, {'counter': 3988}, 
{'counter': 7638}, {'counter': 8250}, {'counter': 29514}, {'counter': 4940}, 
{'counter': 12834}, {'counter': 31153}, {'counter': 8588}, {'counter': 17585}, 
{'counter': 7099}, {'counter': 18580}, {'counter': 2575}, {'counter': 3696}, 
{'counter': 5071}, {'counter': 4074}, {'counter': 15355}, {'counter': 16520}, 
{'counter': 13850}, {'counter': 18639}, {'counter': 22640}, {'counter': 13962}, 
{'counter': 14354}, {'counter': 10945}, {'counter': 10330}] 

所以我想仅仅是价值,而不是键名计数器显示这样我就可以计算第95个百分点,执行以下操作:

for i in a: 
    print np.percentile(map(int,i),95) 
+1

我认为一个mongo查询不能做到这一点。所以无论是映射客户端还是使用map-reduce。 – hgoebl

+0

为什么'ast.literal_eval(json.dumps(...))'?对我来说似乎完全是多余的。 – Rafa

+0

嗨,那只是摆脱你{XXXXXXX}显示除了没有任何目的。 – user3105272

回答

0

有一票百分运营商加入到MongoDB的聚合框架。

https://jira.mongodb.org/browse/SERVER-7463

当释放时,你就可以完全做到这一点的服务器端。

现在,像hgoebl建议的那样,您必须在客户端执行此操作,或者使用map-reduce。

a = db.bastion.find({ }, { 'counter': 1, '_id': False })))) 

np.percentile([x['score'] for x in a], 95) 
+0

嗨,Rafa谢谢你! – user3105272

+0

不客气。顺便说一句,我用更适当的方式更新了答案,以声明'a'变量。 – Rafa

0

如果我理解你对,你想摆脱标记。
所以试试这个,然后:

var ch = db.bastion.find({ },{ 'counter': 1, '_id': False }; ch.forEach(function(doc) {print(doc.counter);}); 

这会给你明确的价值观

+0

谢谢扎利现在就放弃这一切。 – user3105272

+0

这是JavaScript,而不是Python。 – Rafa