gpt4 book ai didi

arrays - MongoDB 获取数组中特定键的计数

转载 作者:行者123 更新时间:2023-12-05 09:23:29 26 4
gpt4 key购买 nike

在mongoDB中,我们如何获取数组中特定键的个数

{
"_id" : ObjectId("52d9212608a224e99676d378"),
"business" : [
{
"name" : "abc",
"rating" : 4.5
},
{
"name" : "pqr"
},
{
"name" : "xyz",
"rating" : 3.6
}
]
}

在上面的示例中,business 是一个数组(带有“name”和/或“rating”键)

如何获取仅存在“rating”键的业务数组的数量?

预期输出是:2

最佳答案

看起来你必须使用 Aggregation Framework .特别是你需要 $unwind你的数组,然后只匹配包含 rating 字段的元素,然后是 $group文档恢复为原始格式。

尝试这样的事情:

db.test.aggregate([
{ $match: { /* your query criteria document */ } },
{ $unwind: "$business" },
{ $match: {
"business.rating": { $exists: 1 }
}
},
{ $group: {
_id: "$_id",
business: { $push: "$business" },
business_count: { $sum: 1 }
}
}
])

结果如下所示:

{
_id: ObjectId("52d9212608a224e99676d378"),
business: [
{ name: "abc", rating: 4.5 },
{ name: "xyz", rating: 3.6 }
],
business_count: 2
}

UPD 看起来 OP 不想通过包装文档 _id 字段来对结果进行分组。不幸的是 $group 表达式必须指定 _id 值,否则会失败并出现异常。但是,这个值实际上可以是常量(例如普通 null'foobar'),因此只有一个结果组具有集合聚合。

关于arrays - MongoDB 获取数组中特定键的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21186228/

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