2017-12-27 2 views
0

MongoDB Collection -:MongoDB - entfernen Sie doppelte Werte in der Gruppe von Liste

{ 
"_id" : ObjectId("59b0fdea8711111"), 
"address" : { 
    "building" : "123", 
}, 
"borough" : "Manhattan", 
"grades" : [ 
    { 
     "grade" : "A", 
     "score" : 8 
    }, 
    { 
     "grade" : "B", 
     "score" : 23 
    }, 
    { 
     "grade" : "A", 
     "score" : 12 
    }, 
], 
"name" : "Glorious Food", 
"restaurant_id" : "30112340" 

}

ich alle von Klasse zu einer Gruppe benötigen, und dann mit dieser Klasse eine Liste aller Namen zu haben. Wenn ich meinen Code ausführen, bekam ich es, aber ich Duplikate Werte hatte, wie Sie als Unternehmen haben drei Noten sehen können, davon 2 mit a-Grad, so dass Unternehmen zweimal in meiner Liste erscheinen dies ist mein Code:

db.getCollection('restaurants').aggregate([ 
{$project:{ 
    "borough":1, 
    "grades.grade":1, 
    "name":1 
    }},          
{$match:{"borough":"Manhattan"}}, 
{$unwind:"$grades"}, 
{$group:{ 
    "_id":"$grades", 
    name:{$push: {restname:"$name"}}}}, 
{$sort:{"_id":1}} 


]) 

und hier ist ein Beispiel für meine Ausgabe

{ 
"_id" : { 
    "grade" : "A" 
}, 
"name" : [ 
    { 
     "restname" : "Glorious Food" 
    }, 
    { 
     "restname" : "Glorious Food" 
    { 
     "restname" : "1 East 66Th Street Kitchen" 
    }, 

Unterm Strich ich die restname will für jede Klasse

Dank verschieden sein!

+0

Also, was ist der Code, den Sie ausführen? –

+0

Mögliches Duplikat von [So entfernen Sie doppelte Einträge aus einem Array?] (Https://stackoverflow.com/questions/9862255/how-to-remove-duplicate-entries-from-an-array) – Veeram

Antwort

0

Ich gehe davon aus Ihrem Code so etwas wie dies tut:

db.collection.aggregate([ 
{ $unwind: "$grades"}, 
{ 
    $group: { 
    _id: { grade: "$grades.grade"}, 
    name: { $push: { restname: "$name"}} 
    } 
} 
]) 

was müssen Sie verwenden, um ist $addToSet statt $push:

db.collection.aggregate([ 
{ $unwind: "$grades"}, 
{ 
    $group: { 
    _id: { grade: "$grades.grade"}, 
    name: { $addToSet: { restname: "$name"}} 
    } 
} 
]) 

Hier wird das Verhalten von $addToSet

$ addToSet stellt nur sicher, dass demkeine doppelten Einträge hinzugefügt werdenfestgelegt und wirkt sich nicht auf vorhandene doppelte Elemente aus. $ addToSet tut nicht garantieren eine bestimmte Reihenfolge der Elemente in der modifizierten Gruppe.

+0

Danke, es funktioniert super . und sorry, ich habe etwas anderes anstelle von meinem Code, ich habe es bearbeitet. – Dror

Verwandte Themen