2016-03-18 12 views
1

Ist es möglich, Wertzählungen für einen bestimmten Schlüssel in eingebetteten Dokumenten abzufragen.Mongodb-Gruppenabfrage für eingebettete Dokumente

Hier ist mein Dokument:

{ "_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"} ] } 

Und ich möchte die Anzahl der "fw" erhalten:

Ausgang:

zählt: { "A": 3, „B ": 2," C ": 2," D ": 1}

+0

Ja, es ist möglich. Sie können ähnliche gruppieren und ihre Anzahl mithilfe von Aggregationspipelines zurückgeben. Insbesondere $ gruppe. Versuche es. [docs] (https://docs.mongodb.org/manual/reference/operator/aggregation-pipeline/) – jmugz3

+0

Der JSON im Beispiel ist ungültig. Ich nehme an, Sie meinen "Laufwerke" als Array von Objekten, nicht als ein Objekt von Arrays? –

+0

@JoachimIsaksson Korrigiert. Danke für das Aufzeigen. –

Antwort

3

Aggregation wird es tun. Zuerst $unwind das Array, um eine Zeile per fw Wert zu erhalten, dann $group durch den Wert fw zusammen mit einem $sum von 1, um die Anzahl per fw Wert zu erhalten;

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

Dies gibt die Gesamtzahl, ist es möglich, die eindeutige Anzahl zu erhalten. –

+1

Mein schlechtes sieht gut aus. –

+0

Wenn Sie feststellen, dass Ihr Kommentar nicht anwendbar ist, können Sie löschen. Wenn die Antwort richtig ist, sollten Sie sie akzeptieren. –

Verwandte Themen