2016-05-13 8 views
0

Stellen Ich habe diese Dokumente:MongoDB Dokumente finden und die Duplikate gleichzeitig ausschließen

{name:'pep', team:'barcelona', age:24} 
{name:'boris', team:'madrid', age:52} 
{name:'erdem', team:'barcelona', age:41} 
{name:'robert', team:'barcelona', age:19} 

ich durch diese Liste filtern möchten älter als 20 und deutlich die Ergebnisse von Team so müsste ich haben diese Ergebnisse:

{name:'pep', team:'barcelona', age:24} 
{name:'boris', team:'madrid', age:52} 

Wie kann ich dies in MongoDB tun?

+0

Was geschah mit "Erdem"? – styvane

+0

Es gibt bereits ein Ergebnis mit 'Barcelona' Team (Pep). – R01010010

+0

Und warum wählen Sie "pep" nicht "erdem" sind Ihre Dokumente sortiert oder wollen Sie nur das erste Dokument für jedes Team? – styvane

Antwort

0

Sie müssen die .aggregate-Methode verwenden, die Zugriff auf die Aggregationspipeline ermöglicht. Die erste Stufe in der Pipeline ist die Stufe $match, in der Sie die Dokumente herausfiltern, die nicht Ihren Kriterien entsprechen. Die letzte Stufe in der Pipeline ist die $group Bühne, wo Ihre Gruppe Ihre Dokumente von team und verwenden Sie die $first oder $last Akku-Operator, um das erste oder letzte Dokument für jede Gruppe zurückgeben.

db.collection.aggregate([ 
    { "$match": { "age": { "$gt": 20 } } }, 
    { "$group": { "_id": "$team", "doc": { "$first": "$$ROOT" } } } 
]) 
+0

Danke, aber ich versuche es und bekomme "errmsg": "Ausnahme: FieldPath-Feldnamen dürfen nicht mit '$' beginnen." – R01010010

+0

Zeigen Sie, was Sie versucht haben. – styvane