我参加了一个在线Mongo课程。他们提出的一个问题是以下查询会做什么:
db.scores.find( { score : { $gt : 50 }, score : { $lt : 60 } } );
我的第一个猜测是返回分数在50到60之间的所有对象,但正确答案是返回分数小于60的所有对象。为什么会这样?
答案 0 :(得分:3)
find
方法第一个参数是文档而{ "score" : { "$gt" : 50 }, "score" : { "$lt" : 60 } }
是valid JSON document但JavaScript会覆盖具有相同名称的属性。因此,首先score
将被覆盖。以下查询将返回分数在50到60之间的所有对象。
db.scores.find( { score : { $gt : 50 , $lt : 60 } } );
答案 1 :(得分:1)
当您在单个字段上查询时,您需要使用$and,因为它返回第二个表达式的结果,该结果覆盖了第一个表达式。 尝试此查询作为示例:
db.scores.find({
score : { $gt : 50 },
score : { $lt : 60 },
score : { $lt : 40 }
})