所以我有一堆简单的文件,比如
{
"foos": [
ObjectId("5105862f2b5e30877c685c58"),
ObjectId("5105862f2b5e30877c685c57"),
ObjectId("5105862f2b5e30877c685c56"),
],
"typ": "Organisation",
}
Run Code Online (Sandbox Code Playgroud)
我想找出与foos"组织"类型的文件相关联的整体大小
所以我有这个聚合查询
db.profil.aggregate(
[
{
$match:{
"typ":"Organisation"
}
},
{
$project: {
fooos: { $size: "$foos" }
}
}
]
)
Run Code Online (Sandbox Code Playgroud)
这将返回每个文档的所有foos的计数
喜欢 :
{ "_id" : ObjectId("50e577602b5e05e74b38a6c8"), "foooos" : 1 }
{ "_id" : ObjectId("51922170975a09f363e3eef5"), "foooos" : 3 }
{ "_id" : ObjectId("51922170975a09f363e3eef8"), "foooos" : 2 }
{ "_id" : ObjectId("5175441d975ae346a3a8dff2"), "foooos" : 0 }
{ "_id" : ObjectId("5192216f975a09f363e3eee9"), "foooos" : 2 }
{ "_id" : ObjectId("5192216f975a09f363e3eeeb"), "foooos" : 3 }
{ "_id" : ObjectId("5192216f975a09f363e3eee4"), "foooos" : 2 }
{ "_id" : ObjectId("5192216f975a09f363e3eee6"), "foooos" : 2 }
{ "_id" : ObjectId("5192216f975a09f363e3eedb"), "foooos" : 2 }
{ "_id" : ObjectId("51922174975a09f363e3ef4a"), "foooos" : 1 }
{ "_id" : ObjectId("5192216f975a09f363e3eee1"), "foooos" : 1 }
{ "_id" : ObjectId("5192216e975a09f363e3eed7"), "foooos" : 2 }
{ "_id" : ObjectId("5192216f975a09f363e3eeee"), "foooos" : 3 }
Run Code Online (Sandbox Code Playgroud)
是否有一些查询将返回所有文件的foos的总计数?
我用$ sum玩了arround但不知道如何结合我的查询,我只会得到语法错误,知道这是否可能会很酷
chr*_*dam 35
$group在$project步骤之后包括操作员管道阶段如下:
db.profil.aggregate([
{ "$match":{ "typ": "Organisation" } },
{ "$project": {
"fooos": { "$size": "$foos" }
} },
{ "$group": {
"_id": null,
"count": {
"$sum": "$fooos"
}
} }
])
Run Code Online (Sandbox Code Playgroud)
这将对前一阶段的所有输入文档进行分组$project,并将累加器表达式应用于组中$sum的fooos字段以获取总计(使用上一个示例):
这也可以通过将$project管道传递为:
db.profil.aggregate([
{ "$match": { "typ": "Organisation" } },
{ "$group": {
"_id": null,
"count": {
"$sum": { "$size": "$foos" }
}
} }
])
Run Code Online (Sandbox Code Playgroud)
产量
/* 0 */
{
"result" : [
{
"_id" : null,
"count" : 24
}
],
"ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
小智 13
我知道这是一个老问题,但如果你愿意,你可以完全绕过项目,那么这个怎么样?
db.profil.aggregate([
{
"$match":{ "typ": "Organisation" }
},
{
"$group":
{
"_id": null,
"count":
{
"$sum": { "$size": "$foos" }
}
}
}])
Run Code Online (Sandbox Code Playgroud)
输出保持不变,似乎(稍微)更快.
| 归档时间: |
|
| 查看次数: |
14591 次 |
| 最近记录: |