Я пытаюсь выполнить сложную агрегацию, чтобы получить размер вложенного массива в документе в коллекции.
Вот как заново создать пример данных:
db.test.insert({
projects: [
{
_id: 1,
comments: [
'a',
'b',
'c'
]
},
{
_id: 2,
comments: [
'a',
'b'
]
},
{
_id: 3,
comments: []
}
]
})
Агрегация, которую я бы выполнил, идет здесь:
db.test.aggregate([
// enter aggregation here
])
Вот желаемый результат:
[{
projects: [
{
_id: 1,
comment_count: 3
},
{
_id: 2,
comment_count: 2
},
{
_id: 3,
comment_count: 0
}
]
}]
Я борюсь с тем, как написать это.Если я попробую следующее:
"projects.comment_count": {"$size": }
Результат вернет размер полученного массива:
[{
projects: [
{
_id: 1,
comment_count: 3
},
{
_id: 2,
comment_count: 3
},
{
_id: 3,
comment_count: 3
}
]
}]
Если я попытаюсь использовать метод $ map, напримерthis:
"projects.comment_count": {
"$map": {
"input": "$projects",
"as": "project",
"in": {
"$size": "$$project.comments"
}
}
}
Возвращает массив, который выглядит следующим образом для каждого объекта в массиве:
[{
projects: [
{
_id: 1,
comment_count: [3, 2, 0]
},
{
_id: 2,
comment_count: [3, 2, 0]
},
{
_id: 3,
comment_count: [3, 2, 0]
}
]
}]
Заранее спасибо!