2016-06-01 11 views
2

Ich habe Mongo-Dokumente im folgenden Format. Ich möchte die devices_ids für jede eindeutige phone_numbers erhalten, aber meine Mongo-Abfrage gibt kein korrektes Ergebnis.Abrufen von Gruppe nach Ergebnis mit Arrays in Mongo

Kann jemand mein Problem aufzeigen?

{ 
    "_id" : ObjectId("56cf21562e7b232d022f334e871"), 
    "uid" : 5, 
    "device_id" : "352136234234325", 
    "name" : "user1", 
    "email" : ["[email protected]" ], 
    "phone_number" : [ 
     "+919890273451" 
    ] 
} 
{ 
    "_id" : ObjectId("56cf21562e7b2d032422f334e872"), 
    "uid" : 15, 
    "device_id" : "352136", 
    "name" : "user1", 
    "email" : [ "[email protected]"], 
    "phone_number" : [ 
     "+919890273451" 
    ] 
} 
{ 
    "_id" : ObjectId("56cf21562342e7b2d022f334e873"), 
    "uid" : 51, 
    "device_id" : "352136067208559", 
    "name" : "user1", 
    "email" : [ "[email protected]"], 
    "phone_number" : [ 
     "+919890273451" 
    ] 
} 

Meine erwartete Ausgabe ist

{ 
"phone_number" : "+919890273451", 
device_ids : ["352136067208559","352136","352136234234325"]} 
} 

ich diese Abfrage versucht haben:

db.contact.aggregate([{ 
    $unwind: "$phone_number" 
}, 
{$group: {"_id":"$phone_number"}, 
device_ids: { $push: { user: "$device_id"} } 
} 
], { 
allowDiskUse:true, 
cursor:{} 
}); 

Antwort

1

wenn $push verwenden Sie nicht brauchen touple Namen angeben - einfach nur Wert drücken.

Bitte siehe unten:

db.coll.aggregate([{ 
     $unwind : "$phone_number" 
    }, { 
     $group : { 
      _id : "$phone_number", 
      device_ids : { 
       $addToSet : "$device_id" 
      } 
     } 
    } 
]) 
+0

Dank Professor. Es funktioniert jetzt. Gibt aber repeatative device_id in $ push. Können wir es zu einem einzigartigen Element-Array machen? –

+1

Verwenden Sie '$ addToSet' insted' $ push' - vergessen Sie das :-) @VigneshPrajapati – profesor79

+0

ohh.Yes. Danke @professor! –

Verwandte Themen