V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
DoodleSit
V2EX  ›  MongoDB

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

  •  
  •   DoodleSit · 2021-05-20 18:13:08 +08:00 · 1878 次点击
    这是一个创建于 1290 天前的主题,其中的信息可能已经有所发展或是发生改变。
    
    [
    {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
                            }
                        }
                    ]
             }
       ])
    
    
    4 条回复    2021-05-21 14:46:22 +08:00
    xiongbiao
        1
    xiongbiao  
       2021-05-20 19:34:34 +08:00
    没有问题
    Vegetable
        2
    Vegetable  
       2021-05-20 19:39:29 +08:00
    唯一的问题时,null 是 exists 的
    galikeoy
        3
    galikeoy  
       2021-05-21 14:08:08 +08:00
    返回带 C 的,这不是很正常嘛
    ```json
    {
    $match: {
    "groups": {
    $ne: null
    }
    }
    ```
    xkeyideal
        4
    xkeyideal  
       2021-05-21 14:46:22 +08:00
    仅限给出的数据结构,将 groups 从数组变成 map,就可以不需要使用 mongodb 的 aggregate,有时候也需要照顾一下系统的性能,使用普通的查询即可,db.db_types.find({"groups.B": 1})
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2707 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:12 · PVG 17:12 · LAX 01:12 · JFK 04:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.