Вы можете использовать следующий синтаксис для поиска документов с повторяющимися значениями в 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' }
Это говорит нам о том, что значения «Rockets» и «Mavs» встречаются несколько раз в поле «team».
Обратите внимание, что мы можем просто изменить $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: как сгруппировать по нескольким полям