Я пытаюсь запросить коллекцию с несколькими версиями документов с одним и тем же внутренним ключом (новая версия создается при обновлении и сохранении истории).
Я хочу вернуть элементы из нескольких вложенных объектов в форме:
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
})