#mongodb
#mongodb
Вопрос:
Например, у меня есть коллекция с кучей документов
{ элементы: [ObjectId1, ObjectId2 и т.д.] }
Как мне выполнить запрос, чтобы определить, какие документы имеют дубликаты? .distinct
возвращает различные значения по всей коллекции, но я хочу иметь возможность сообщать о каждом документе:
- длина / размер
items
- длина / размер уникального / отдельного
items
по сути, чтобы понять, какие документы имеют дубликаты в items
массиве.
Ответ №1:
Вы можете использовать агрегацию с оператором $addToSet, чтобы иметь уникальные элементы в наборе:
db.collection.aggregate([
{
"$unwind": "$items"
},
{
"$group": {
"_id": "$_id",
"items_cnt": {
"$sum": 1
},
"unique_items": {
"$addToSet": "$items"
}
}
},
{
"$project": {
"items_cnt": 1,
"unique_items_cnt": {
"$size": "$unique_items"
}
}
}
])