... и уменьшить вложенные документы по критерию фильтра?Как отсортировать по сумме поля поддокумента
I've получили следующие структуры данных
{
"_id" : "PwS8gcfhaWLaudjaJ",
"name" : "Name of Document 1",
"subdocuments" : [
{
"subdocumentsId" : "dqR9gPi7tNvzpEhEW",
"number" : 1
},
{
"subdocumentsId" : "vTaPoQYdaDbqMH7Pg",
"number" : 1
},
{
"subdocumentsId" : "tPJ45KqAzvFPBRstZ",
"number" : 3
}
]
}
{
"_id" : "PwS8gcfhaWLaudjaJ",
"name" : "Name of Document 2",
"subdocuments" : [
{
"subdocumentsId" : "dqR9gPi7tNvzpEhEW",
"number" : 2
},
{
"subdocumentsId" : "tPJ45KqAzvFPBRstZ",
"number" : 5
}
]
}
Как построить запрос, чтобы получить результат ниже
{
"_id" : "PwS8gcfhaWLaudjaJ",
"name" : "Name of Document 2",
"subdocuments" : [
{
"subdocumentsId" : "dqR9gPi7tNvzpEhEW",
"number" : 2
},
{
"subdocumentsId" : "tPJ45KqAzvFPBRstZ",
"number" : 5
}
]
}
{
"_id" : "PwS8gcfhaWLaudjaJ",
"name" : "Name of Document 1",
"subdocuments" : [
{
"subdocumentsId" : "dqR9gPi7tNvzpEhEW",
"number" : 1
},
{
"subdocumentsId" : "tPJ45KqAzvFPBRstZ",
"number" : 3
}
]
}
... и вот мой текущий запрос
var filterIds = ['dqR9gPi7tNvzpEhEW','tPJ45KqAzvFPBRstZ'];
db.Documents
.aggregate([
{
$match: {
'subdocuments.subdocumentsId': {
$in: filterIds
}
}
}, {
$project: {
_id: 1,
name: 1,
totalNumber: {
$sum: '$subdocuments.number'
}
}
}, {
$sort: {
totalNumber: 1
}
}
])
Я не могу работать с $ sum-выражением в $ project-operation. Он доступен только для $ group.
Есть ли общее обходное решение, или можно получить результат с помощью $ group?
Возможно, кому-то может помочь, пожалуйста?
Так здорово, спасибо вам большое! Это то, что я искал. – moradec