MongoDB聚合数组

时间:2012-11-05 13:54:03

标签: mongodb pymongo

假设我有一个包含文件的MongoDB集合 -

{
  "name": "Hawaiian",
  "toppings": ['cheese', 'ham', 'pineapple'],
}

我怎样才能获得所有集合toppings的列表?

我假设我必须使用MapReduce或新的聚合框架(理想情况下是MapReduce,因为我不能使用新的聚合框架),但我不知道该怎么做。

谢谢!

编辑:并且,有没有办法计算数据库级别的不同顶部数量?

3 个答案:

答案 0 :(得分:1)

MongoDB支持DISTINCT聚合。这应该可以解决问题。

答案 1 :(得分:1)

您可以使用distinct查询:

db.coll.distinct('toppings')

答案 2 :(得分:1)

distinct将适用于有限数量的唯一项目(< = 50k?)

如果超过你必须使用mapreduce

fun_map =“”“function()for(e in this.toppings){emit(entities.toppings [e],1);}”“”

fun_reduce =“”“function(key,values){var total = 0; for(var i = 0; i< values.length; i ++){total + = values [i];} return total;} “”” 然后你打电话

collection.map_reduce(fun_map,fun_reduce,out = {“replace”:'your_outputcollection_name“},full_response = True)

您的顶部项目将是您的输出集合的_id,而值将代表每个特定顶部的计数