Как Проверить Повторяющихся Элементов в Массиве в 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+"
    ]
}

Сохранить себе или поделиться:

Add a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *