Как Проверить Повторяющихся Элементов в Массиве в MongoDB
Если у вас есть коллекция больших и нужно выяснить, есть ли элементы, которые имеют одинаковые значения в одном массиве. Эта проблема-нибудь, вероятно, случится с вами, но не волнуйтесь! Чтобы проверить, есть ли дубликаты в массиве, мы будем использовать .aggregate()
в MongoDB.
Мы будем создавать коллекцию документов, например, сначала вставляем тестовую запись:
db.demo.insertOne({ "assunto" :[ "MySQL" , "MongoDB" , "Node" , "MySQL" ]}); |
После того, как мы будем вставлять более одной записи с одним повторяющийся элемент в нашем массиве тема:
db.demo.insertOne({ "assunto" :[ "Java" , "C+" , "Node" , "C+" ]}); |
И теперь только для тестирования, мы будем вставить запись без каких-либо пункта дублируются:
db.demo.insertOne({ "assunto" :[ "JavaScript" , "C#" , "Python" ]}); |
Теперь просмотрите все документы из нашей коллекции с помощью метода .find()
db.demo.find(); |
Это даст следующий результат:
/* 1 */ { "_id" : ObjectId( "5f89f5da526ef077555fe4aa" ), "assunto" : [ "MySQL" , "MongoDB" , "Node" ] } /* 2 */ { "_id" : ObjectId( "5f89f718526ef077555fe4ab" ), "assunto" : [ "Java" , "C+" , "Node" ] } /* 3 */ { "_id" : ObjectId( "5f89f71f526ef077555fe4ac" ), "assunto" : [ "JavaScript" , "C#" , "Python" ] } |
Мы будем использовать метод .aggregate
, чтобы проверить, и проверить, есть ли дубликаты в массиве в документах нашей коллекции:
db.demo.aggregate([ { "$project" : { "assunto" :1}}, { "$unwind" : "$assunto" }, { "$group" : { "_id" :{ "_id" : "$_id" , "Name" : "$assunto" }, "count" :{ "$sum" :1}}}, { "$match" : { "count" :{ "$gt" :1}}}, { "$group" : { "_id" : "$_id._id" , "assunto" :{ "$addToSet" : "$_id.Name" }}} ]) |
Вы должны ожидать следующий результат:
/* 1 */ { "_id" : ObjectId( "5f89ff1f526ef077555fe4b0" ), "assunto" : [ "MySQL" ] } /* 2 */ { "_id" : ObjectId( "5f89ff24526ef077555fe4b1" ), "assunto" : [ "C+" ] } |
Сохранить себе или поделиться: