Запрос Монго: массив объектов, в которых значение ключа повторяется - PullRequest
0 голосов
/ 03 мая 2018

Я новичок в Монго. Публикация этого вопроса, потому что я не уверен, как искать это в Google

У меня есть книга документов, как показано ниже

{
  bookId: 1
  title: 'some title',
  publicationDate: DD-MM-YYYY,
  editions: [{
    editionId: 1
  },{
    editionId: 2
  }]
}

и еще один такой

{
  bookId: 2
  title: 'some title 2',
  publicationDate: DD-MM-YYYY,
  editions: [{
    editionId: 1
  },{
    editionId: 1
  }]
}

Я хочу написать запрос db.books.find({}), который бы возвращал только те книги, в которых editions.editionId был продублирован для книги.

Так что в этом примере для bookId: 2 есть два издания с editionId:1.

Есть предложения?

1 Ответ

0 голосов
/ 03 мая 2018

Вы можете использовать структуру агрегации; в частности, вы можете использовать оператор $ group , чтобы сгруппировать записи вместе по идентификатору книги и издания и подсчитать, сколько раз они встречаются: если число больше 1, значит, вы нашли дублирование.

Вот пример:

db.books.aggregate([
  {$unwind: "$editions"},
  {$group: {"_id": {"_id": "$_id", "editionId": "$editions.editionId"}, "count": {$sum: 1}}},
  {$match: {"count" : {"$gt": 1}}}
])

Обратите внимание, что это не возвращает целые записи книги, но возвращает их идентификаторы; затем вы можете использовать их в последующем запросе для извлечения всей записи или, например, выполнить дедупликацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...