在我的文档中,我有两个字段:
{ 等级: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}})
但是,如果玩家没有年龄或等级设置,该如何处理?
答案 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)
实际上这就是我所需要的
Gamer.find( {
$and : [
{ $or : [ { rank: {$gt: 50, $lt: 80} }, {rank: {$exists: false}} ] },
{ $or : [ { age: {$gt: 27, $lt: 39} }, {age: {$exists: false}} ] }
]
} )