Как найти дубликаты в mongodb
Вы можете использовать следующий синтаксис для поиска документов с повторяющимися значениями в MongoDB:
db.collection.aggregate([ {" $group ": { "_id": " $field1 ", "count": { " $sum ": 1 } } }, {" $match ": {"_id" :{ " $ne " : null } , "count" : {" $gt ": 1} } }, {" $project ": {"name": " $_id ", "_id": 0} } ])
Вот что делает этот синтаксис:
- Сгруппируйте все документы с одинаковым значением в поле 1.
- Группы сопоставления , содержащие более одного документа
- Проецируйте все группы, имеющие более одного документа
Этот конкретный запрос ищет повторяющиеся значения в столбце field1 . Просто отредактируйте это значение, чтобы изменить поле для поиска.
В следующем примере показано, как использовать этот синтаксис с командой по сбору данных со следующими документами:
db.teams.insertOne({team: " Mavs ", position: " Guard ", points: 31 }) db.teams.insertOne({team: " Mavs ", position: " Guard ", points: 22 }) db.teams.insertOne({team: " Rockets ", position: " Center ", points: 19 }) db.teams.insertOne({team: " Rockets ", position: " Forward ", points: 26 }) db.teams.insertOne({team: " Cavs ", position: " Guard ", points: 33 })
Пример: поиск документов с повторяющимися значениями
Мы можем использовать следующий код, чтобы найти все повторяющиеся значения в столбце «команда»:
db.teams.aggregate([ {" $group ": { "_id": " $team ", "count": { " $sum ": 1 } } }, {" $match ": {"_id" :{ " $ne " : null } , "count" : {" $gt ": 1} } }, {" $project ": {"name": " $_id ", "_id": 0} } ])
Этот запрос возвращает следующие результаты:
{ name: 'Rockets' } { name: 'Mavs' }
Это говорит нам о том, что значения «Ракеты» и «Мавс» появляются несколько раз в поле «команда».
Обратите внимание, что мы можем просто заменить $team на $position , чтобы вместо этого искать повторяющиеся значения в поле «position»:
db.teams.aggregate([ {" $group ": { "_id": " $position ", "count": { " $sum ": 1 } } }, {" $match ": {"_id" :{ " $ne " : null } , "count" : {" $gt ": 1} } }, {" $project ": {"name": " $_id ", "_id": 0} } ])
Этот запрос возвращает следующие результаты:
{ name: 'Guard' }
Это говорит нам о том, что в поле «позиция» несколько раз появляется «Охранник».
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в MongoDB:
MongoDB: как добавить новое поле в коллекцию
MongoDB: как группировать и считать
MongoDB: как группировать по нескольким полям