2016-03-18 212 views
1

是否可以查询嵌入式文档中特定键的值计数。嵌入式文档的Mongodb组查询

这里是我的文档:

{ "_id" : 1, "drives" : [ {"fw": "A"}, {"fw": "B"} ] } 
{ "_id" : 2, "drives" : [ {"fw": "B"}, {"fw": "C"} ] } 
{ "_id" : 3, "drives" : [ {"fw": "A"}, {"fw": "C"} ] } 
{ "_id" : 4, "drives" : [ {"fw": "A"}, {"fw": "D"} ] } 

,我想获得 “FW” 的计数:

输出:

计数:{ “A”:3,“B “:2,”C“:2,”D“:1}

+0

是的,这是可能的。您可以将相似的组合起来,并使用聚合管道返回其计数。具体来说,$组。试一试。 [docs](https://docs.mongodb.org/manual/reference/operator/aggregation-pipeline/) – jmugz3

+0

示例中的JSON无效,我假设你的意思是'drives'是一个对象数组,而不是数组的对象? –

+0

@JoachimIsaksson固定。谢谢指出。 –

回答

3

聚合会执行此操作。首先$unwind数组得到一行,每fw值,然后$groupfw的值连同一个$sum的1得到的数值为fw的值;

db.test.aggregate({ $unwind: "$drives" }, 
        { $group: { _id: "$drives.fw", cnt: {$sum:1} } }) 

# { "_id" : "D", "cnt" : 1 } 
# { "_id" : "C", "cnt" : 2 } 
# { "_id" : "B", "cnt" : 2 } 
# { "_id" : "A", "cnt" : 3 } 
+0

这给总数,是否有可能获得唯一的计数。 –

+1

我的坏看起来不错。 –

+0

如果您意识到您的评论不适用,则可以删除。如果答案是正确的,你应该接受它。 –