MongoDB获得不同值的计数

时间:2016-08-30 16:52:36

标签: mongodb pymongo

假设我有一系列记录:

{'name':'record1', 'colors':['red','green','blue']}
{'name':'record2', 'colors':['red','orange']}
{'name':'record3', 'colors':['red','yellow','blue']}
{'name':'record4', 'colors':['red','green','blue']}

我可以使用以下方法获取不同颜色的列表:

collection.distinct('colors')
#returns
['red','green','blue','orange','yellow']

是否可以计算出这些值出现的记录?

例如:

[{'count':4,'color':'red'},{'count':2,'color':'green'}]

1 个答案:

答案 0 :(得分:2)

使用$group阶段的聚合管道,如下所示:

db.collectionName.aggregate( 
  { $unwind: "$colors" }, 
  { $group: { "_id": "$colors", "count": { $sum: 1 } } }, 
  { $project: { "color": "$_id", "count": 1 } }
);

将导致您的文件进入

{ "count" : 1, "color" : "yellow" }
{ "count" : 1, "color" : "orange" }
{ "count" : 3, "color" : "blue" }
{ "count" : 2, "color" : "green" }
{ "count" : 4, "color" : "red" }

不要忘记更改集合名称。