mongodb查询嵌套$或“ AND”内

时间:2018-12-19 22:00:15

标签: mongodb

在我的文档中,我有两个字段:

{     等级:null / 0-1000,     年龄:空/ 0-1000 }

我想进行如下查询

(rank == null || 50 < rank && rank < 80) && (age == null || 27 < age && age < 39)

我的问题是,如何在单个mongodb find查询中表达此查询?

我可以轻松写

Gamer.find({rank: {$gt: 50, $lt: 80}, age: {$gt: 27, $lt: 39}})

但是,如果玩家没有年龄或等级设置,该如何处理?

2 个答案:

答案 0 :(得分:0)

您可以对该查询使用$ exists。查询看起来像这样。

    Gamer.find({$or:[{rank: { $gt: 50, $lt: 80}}, {rank: {$exists: false}}]}, 
{$or:[{age: { $gt: 27, $lt: 39}}, {age: {$exists: false}}]});

它将检查等级是否存在并满足条件,然后返回数据。

答案 1 :(得分:0)

实际上这就是我所需要的

https://docs.mongodb.com/manual/reference/operator/query/and/#and-queries-with-multiple-expressions-specifying-the-same-operator

Gamer.find( {
    $and : [
        { $or : [ { rank: {$gt: 50, $lt: 80} }, {rank: {$exists: false}} ] },
        { $or : [ { age: {$gt: 27, $lt: 39} }, {age: {$exists: false}} ] }
    ]
} )