我有以下架构:
{
_id: 1,
post: 'content',
comments: [
{
id: 1,
items: ['<other_doc_id',...] // assume 3 items
},
{
id: 2,
items: ['<other_doc_id',...] // assume 2 items
}
]
}
我想计算集合中所有文档的项目数,就像在上面的场景中它应该返回5,如果我们有另一个文档具有相同的注释,那么它应该返回10。
更新 这是我的样本数据
"comments": [
{
"id": {
"$oid": "5a201f6d7295d76514a69a7c"
},
"_id": {
"$oid": "5a2e84cc9735111c147a359f"
},
"tags": [
{
"$oid": "5a251acb6eba8810f97e7abc"
},
{
"$oid": "5a251ae66eba8810f97e7abd"
}
],
"items": [
{
"$oid": "5a201f767295d76514a69a7d"
},
{
"$oid": "5a2512a1dc9a8c106c82226d"
}
]
}
],
QUERY
posts.aggregate([{
"$project": {
"count": {
"$sum": {
"$map": {
"input": "comments",
"as": "result",
"in": {
"$size": "$$result.items"
}
}
}
}
}
}]);
答案 0 :(得分:3)
您可以使用$map
计算文档注释数组中每个项目的$size
,然后$sum
计算所有尺寸。
db.collection_name.aggregate([
{
"$project": {
"count": {
"$sum": {
"$map": {
"input": "$comments",
"as": "result",
"in": {
"$size": "$$result.items"
}
}
}
}
}
}
])