2016-06-04 3 views
0

Структура моей базы данных примерно такая.MongoDB создает дубликаты в .aggregate()

{ 
     _id : ObjectId(...), 
     no : 2, 
     dates : [ 
     { year : 2016, month : 3, grade : {} }, 
     { year : 2016, month : 2, grade : {} }, 
     { year : 2016, month : 1, grade : {} }, 
     ] 
    }, 
    { 
     _id : ObjectId(...), 
     no : 1, 
     dates : [ 
     { year : 2016, month : 3, grade : {} }, 
     { year : 2016, month : 2, grade : {} }, 
     { year : 2016, month : 1, grade : {} }, 
     ] 
    } 

Теперь необходимо найти груз и отсортировать его по годам, а затем по месяцам. У меня есть следующий код:

db.something.aggregate([ 
     { '$match' : { 'no' : 2 }}, 
     { '$unwind' : '$dates'}, 
     { '$sort' : { 
     'dates.year' : 1, 
     'dates.month' : 1 
     }}, 
     { '$group' : { 
     '_id' : '$no', 
     'dates' : { '$push' : '$dates' } 
     }} 
    ]).pretty(); 

Я думаю, что я подхожу к нему правильно, но он как-то генерирует дубликаты. Что-то вроде этого:

{ 
     _id : ObjectId(...), 
     no : 2, 
     dates : [ 
     { year : 2016, month : 1, grade : {} }, 
     { year : 2016, month : 1, grade : {} }, 
     { year : 2016, month : 2, grade : {} }, 
     { year : 2016, month : 2, grade : {} }, 
     { year : 2016, month : 3, grade : {} }, 
     { year : 2016, month : 3, grade : {} }, 
     ] 
    } 

Если удалить $sort и $group результат не содержит дубликатов. Я уверен, что вставил все правильно, и у меня нет дубликатов или вообще ничего в моей базе данных. Как вы думаете, что с этим не так? Я совершенно пуст относительно того, как я должен действовать.

Большое спасибо!

[EDIT]

Хорошо, я просто переустановил MongoDB, и это просто волшебно работает. Я все еще не знаю, что произошло.

ответ

0

похоже, что ваша структура может содержать похожие данные (для каждого объекта), а после $unwind тогда $group они становятся видимыми.

Чтобы избежать этого изменения:

'dates' : { '$push' : '$dates' } 

To:

'dates' : { '$adToSet' : '$dates' } 

как это только добавит уникальные значения в массив

Смежные вопросы