2016-05-13 3 views
0

Представьте меня есть эти документы:MongoDB найти документы и исключить дубликаты в то же время

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

Я хочу, чтобы отфильтровать этот список старше 20 и различны результаты по команде, так что я должен был бы иметь это результаты:

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

Как это сделать в MongoDB?

+0

Что случилось с "Эрдем"? – styvane

+0

Уже есть результат с командой «барселона» (pep). – R01010010

+0

И почему вы выбираете «pep», а не «erdem», ваши документы отсортированы или вам нужен только первый документ для каждой команды? – styvane

ответ

0

Вам необходимо использовать метод .aggregate, который дает доступ к конвейеру агрегации. Первый этап в трубопроводе - это этап $match, где вы отфильтровываете те документы, которые не соответствуют вашим критериям. Последним этапом в конвейере является этап $group, где ваша группа ваших документов находится на team и использует оператор аккумулятораили $last для возврата первого или последнего документа для каждой группы.

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

Спасибо, но я попробую и получаю «errmsg»: «exception: имена полей FieldPath могут не начинаться с« $ ». – R01010010

+0

Покажите, что вы пробовали. – styvane