求助, mongodb 一个语句怎么写呢

2021-05-20 18:13:08 +08:00
 DoodleSit

[
{name:'AL',groups:['A','B']},
{name:'AL',groups:['A','C']},
{name:'BL',groups:null}
]

聚合查询,想查出 groups 不存在或者 groups 包含 B 的结果

如下语句有问题(还是会查出包含‘C’的),帮看看,谢谢


db.db_types.aggregate([
        {
            $match: {
                "$or": [
                    {
                        "groups": 'B'
                    },
                    {
                        "groups": {
                            $exists: false
                        }
                    }
                ]
         }
   ])

1852 次点击
所在节点    MongoDB
4 条回复
xiongbiao
2021-05-20 19:34:34 +08:00
没有问题
Vegetable
2021-05-20 19:39:29 +08:00
唯一的问题时,null 是 exists 的
galikeoy
2021-05-21 14:08:08 +08:00
返回带 C 的,这不是很正常嘛
```json
{
$match: {
"groups": {
$ne: null
}
}
```
xkeyideal
2021-05-21 14:46:22 +08:00
仅限给出的数据结构,将 groups 从数组变成 map,就可以不需要使用 mongodb 的 aggregate,有时候也需要照顾一下系统的性能,使用普通的查询即可,db.db_types.find({"groups.B": 1})

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/778205

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX