mongo的or查询

关于mongodb的or查询事项,请教如下:
Sql的方式 a='x' and b='x' or ( c in (3,2) )
mongo表现出来的结果是先查询了 c in(3,2) 再 进行的相关过滤。
是我的写法有问题,还是说mongo本身不太支持呢

我现在的写法是:

db.getCollection('vip_gindex').find({
    'status': 1,
    $or: [{
        'id': {
            $in: [305898, 433975]
        }
    }]
})

结果就正儿八经只查处了两条出来

阅读 2.7k
2 个回答

你的写法的意思是:

status = 1 AND id IN (305898, 433975)

$or没有什么实际意思,因为是$or后面数组里每个元素是一个条件,你只给了一个元素。
按你要的

a='x' AND b='x' OR ( c IN (3,2) )

应该是:

    db.getCollection('vip_gindex').find({
        $or: [{
            a: 'x',
            b: 'x'
        }, {
            c: {
                $in: [3, 2]
            }
        }]
    });

楼上写法也没错不过复杂了。

db.getCollection('vip_gindex').find({'$or':[{'$and':[{'a':x},{'b':x}]},{'$and':[{'c':{'$in':[3,4]}}]}]})

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进