gpt4 book ai didi

mongodb - 如果使用 mongodb $map 的文档中存在元素,我如何返回 true/false?

转载 作者:可可西里 更新时间:2023-11-01 10:17:26 24 4
gpt4 key购买 nike

我在下面运行一个聚合函数。文档可能有也可能没有元素,我只想返回 true/false。如果元素确实存在,则该元素很大,因此返回整个元素会产生很多问题并且不需要。

为了解决这个问题,我在 3.0.4 版本的生产环境中,目前无法升级到 3.4,尽管看起来那个版本有更好的解决方案。

为了对此进行测试,我在集合 mycollection 中有一个文档。该文档有一个元素 exists,它是一个包含其他元素的对象。它没有名为 notexists

的元素
db.runCommand({
"aggregate": "mycollection",
"pipeline": [{
"$match": {...}
}, {
"$sort": {...}
}, {
"$group": {...}
}, {
"$limit": 10
}, {
"$project": {
"aggregated": {
"$map": {
"input": "$mycollection",
"as": "document",
"in": {
"exists_test":{"$eq":["$$document.exists",null]},
"not_exists_test":{"$eq":["$$document.notexists",null]},
"exists_test_ifnull":{"$ifNull":["$$document.exists","test"]},
"not_exists_test_ifnull":{"$ifNull":["$$document.notexists","test"]},
"exists_content": "$$document.exists"
...
}
}
},
"success": {
"$cond": {
"if": { "$gt": ["$status", 0] },
"then": "false",
"else": "true"
}
}
}
}]
})

不幸的是,这会返回一个文档:

{
aggregated: [{
"exists_test": false, (correct)
"not_exists_test": false, (wrong)
"exists_test_ifnull": content from document.exists, (correct)
"not_exists_test_ifnull": "test", (correct)
"exists_content": content from document.exists, (correct)
}]
}

似乎 "not_exists_test":{"$eq":["$$document.notexists",null]}, 应该返回 true,因为 $ifNull确实准确地反射(reflect)了该值为 null。

最佳答案

尝试 "not_exists_test": { "$gt": ["$$document.notexists", null] },如 BSON types comparison order 中所暗示的那样.

关于mongodb - 如果使用 mongodb $map 的文档中存在元素,我如何返回 true/false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41636524/

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