2016-03-18 173 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

如果您意識到您的評論不適用,則可以刪除。如果答案是正確的,你應該接受它。 –