Как восстановить вложенные документы в нескольких документах, имеющих одинаковое поле в MongoDB? - PullRequest
1 голос
/ 06 января 2020

У меня есть коллекция в mongoDB , которая выглядит следующим образом:

db.mycollection.find({}) 

{
    "_id" : ObjectId("5deb4ce4bbe1b67e6e5611e4"),
    "site" : "MDC",
    "label" : "407",
    "status" : "removed"
}

{
    "_id" : ObjectId("5def36379ca17632de773d7e"),
    "site" : "MDC",
    "label" : "407",
    "status" : "new"
}

{
    "_id" : ObjectId("5df4740eab0d76657c19a7d2"),
    "site" : "MDC",
    "label" : "408",
    "status" : "new"
}

Я хочу перегруппировать свои документы, имеющие одинаковое значение для поля «метка» в одном документе с вложенным документом статуса, чтобы иметь что-то вроде этого:

{
    "_id" : ObjectId("5deb4ce4bbe1b67e6e5611e4"),
    "site" : "MDC",
    "label" : "407",
    "status" : [ 
    {
        "label" : "new"
    }, 
    {
        "label" : "removed"
    }
]
}

Я пробовал разные способы (агрегат, обновление, ..), чтобы сделать это, но это полный провал ...

1 Ответ

1 голос
/ 06 января 2020

Вам необходимо $group на label или site, чтобы $push ваши статусы:

db.collection.aggregate([
    {
        $group: {
            _id: "$label",
            old_id: { $first: "$_id" },
            site: { $first: "$site" },
            status: { $push: { label: "$status" } }
        }
    },
    {
        $project: {
            _id: "$old_id",
            site: 1,
            label: "$_id",
            status: 1
        }
    }
])

Пн go Детская площадка

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