2017-10-11 2 views
0

ich Dokumente, die wie folgt aussehen:Mongo - Distinct Spiel gesamte Array

{"arr":["a","b","c"]}, 
{"arr":["a","b","x"]}, 
{"arr":["c","b","a"]}, 
{"arr":["a","b","c"]} 

Ich möchte verschiedene rufen alle eindeutigen Arrays zu erhalten, jedoch für ein Array Abfrage übereinstimmt Elemente standardmäßig diese Bedeutung:

db.getCollection("mycoll").distinct("arr",{}); 

kehrt:

["a","b","c","x"] 

statt

[["a","b","c"], 
["a","b","x"], 
["c","b","a"]] 

Wie kann ich für verschiedene Arrays abfragen? Ich würde Optional lieben die Anzahl der Vorkommen jedes Ergebnis erhalten zu:

{["a","b","c"] : 2, 
["a","b","x"] : 1, 
["c","b","a"] : 1} 
+0

Verwenden Sie '$ group' im Array mit' $ sum' in der Gesamtpipeline. Etwas wie 'db.collectionname.aggregate ({$ group: {_ id:" $ arr ", count: {$ sum: 1}}})' – Veeram

+0

Das funktionierte für mich: 'db.mycoll.aggregate ({$ group: {_id: "$ arr", Anzahl: {$ sum: 1}}}) '. Vielen Dank! Wenn Sie eine Antwort geben, werde ich es akzeptieren. – Porthos3

+0

Mögliches Duplikat von [Group by sum mongodb] (https://stackoverflow.com/questions/17909694/group-by-sum-mongodb) – Veeram

Antwort

1

Sie $group von arr mit $sum in Aggregation Pipeline nutzen können.

db.mycoll.aggregate({$group:{_id:"$arr", count:{$sum:1}}})