gpt4 book ai didi

Mongodb求和数组字段的大小

转载 作者:IT老高 更新时间:2023-10-28 13:06:10 26 4
gpt4 key购买 nike

所以我有一堆简单的文档,比如

{

"foos": [
ObjectId("5105862f2b5e30877c685c58"),
ObjectId("5105862f2b5e30877c685c57"),
ObjectId("5105862f2b5e30877c685c56"),
],

"typ": "Organisation",

}

我想找出与“组织”类型的文档相关的 foos 的总体大小

所以我有这个聚合查询

db.profil.aggregate(
[
{
$match:{
"typ":"Organisation"
}
},
{
$project: {
fooos: { $size: "$foos" }
}
}
]
)

这将返回每个文档的所有 foo 的计数

喜欢:

{ "_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 }

是否有一些查询会返回所有文档的 foos 的总和?

我用 $sum 玩了 arround,但不知道如何与我的查询结合,我只会遇到语法错误,如果知道这是否可能会很酷

最佳答案

包括 $group $project 之后的运算符(operator)管道阶段步骤如下:

db.profil.aggregate([
{ "$match":{ "typ": "Organisation" } },
{ "$project": {
"fooos": { "$size": "$foos" }
} },
{ "$group": {
"_id": null,
"count": {
"$sum": "$fooos"
}
} }
])

这会将之前 $project 中的所有输入文档分组。阶段并应用累加器表达式 $sum在组内的 fooos 字段上获取总数(使用您的最后一个示例):

这也可以绕过 $project管道为:

db.profil.aggregate([
{ "$match": { "typ": "Organisation" } },
{ "$group": {
"_id": null,
"count": {
"$sum": { "$size": "$foos" }
}
} }
])

输出

/* 0 */
{
"result" : [
{
"_id" : null,
"count" : 24
}
],
"ok" : 1
}

关于Mongodb求和数组字段的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30236495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com