Пн go Агрегировать по нескольким вложенным объектам для возврата полей на основе условных значений - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь запросить коллекцию с несколькими версиями документов с одним и тем же внутренним ключом (новая версия создается при обновлении и сохранении истории).

Я хочу вернуть элементы из нескольких вложенных объектов в форме:

document.items.list(array).contents.list(array).type(string) to say 

if "type" = "pudding" then 
     return document.items.list(array).contents.list(array).data.info.list(array).id 
if "type" = "cake" then
     return document.items.list(array).contents.list(array).data.text

Однако я не могу получить результаты, пока я не изменю запрос, чтобы использовать только идентификатор для пудинга или торт, а не вместе.

Ближайшее, что я получил:

db.getCollection('foo').aggregate([
{
    $match: {
        vertical: "food",
        "document.documentState.state": "ACTIVE",
        "document.templateType": "foo"
    }
},
{
    $unwind: "$document.items"
},
{
    $unwind: "$document.items.list"
},
{
    $unwind: "$document.items.list.contents"
},
{
    $unwind: "$document.items.list.contents.list"
},
{
    $match: { $and: [{
        "document.items.list.contents.list.type": {$in: [ "A","B"] }, 
        "document.group": "Z"}]
        }
},
{
    $group: {
        _id: {
            doc: "$document.id",
            pId: "$document.items.list.contents.list.data.info.list.id",
            cId: "$document.items.list.contents.list.data.id",
            idz: "$document.items.list.contents.list.id",
            listIdz: "$document.items.list.contents.list.id"
        },
        revisionDate: {
            $max: "$document.revisionDate"
        }
    }
}, 
{
    $project: {
        _id: 1,
        revisionDate: 1
    }
},
{
    $sort: {
        "_id.listIdz": 1,
        "_id.idz": 1
    }
}
], {
    allowDiskUse: true
})
...