gpt4 book ai didi

mongodb - $unwind 空数组

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

我有一个用户集合,其中每个文档具有以下结构:

{
"_id": "<id>",
"login": "xxx",
"solved": [
{
"problem": "<problemID>",
"points": 10
},
...
]
}

solved 字段可以为空或包含任意多个子文档。我的目标是获取用户列表以及总分(points 的总和),其中尚未解决任何问题的用户将获得总分 0。这可能吗使用单个查询(最好使用聚合框架)?

我试图在聚合框架中使用以下查询:

{ "$group": {
"_id": "$_id",
"login": { "$first": "$login" },
"solved": { "$addToSet": { "points": 0 } }
} }
{ "$unwind": "$solved" }
{ "$group": {
"_id": "$_id",
"login": { "$first": "$login" },
"solved": { "$sum": "$solved.points" }
} }

但是我收到以下错误:

exception: The top-level _id field is the only field currently supported for exclusion

提前谢谢你

最佳答案

对于 MongoDB 3.2 及更新版本, $unwind 运算符现在有一些选项,特别是 preserveNullAndEmptyArrays 选项可以解决这个问题。

如果此选项设置为 true,并且路径为 null、缺失或空数组, $unwind 输出文档。如果为假, $unwind如果路径为空、缺失或为空数组, 不会输出文档。在您的情况下,将其设置为 true:

db.collection.aggregate([
{ "$unwind": {
"path": "$solved",
"preserveNullAndEmptyArrays": true
} },
{ "$group": {
"_id": "$_id",
"login": { "$first": "$login" },
"solved": { "$sum": "$solved.points" }
} }
])

关于mongodb - $unwind 空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13895006/

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