Запрос различных значений для массива для каждого документа

#mongodb

#mongodb

Вопрос:

Например, у меня есть коллекция с кучей документов

{ элементы: [ObjectId1, ObjectId2 и т.д.] }

Как мне выполнить запрос, чтобы определить, какие документы имеют дубликаты? .distinct возвращает различные значения по всей коллекции, но я хочу иметь возможность сообщать о каждом документе:

  1. длина / размер items
  2. длина / размер уникального / отдельного 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"
      }
    }
  }
])
 

игровая площадка