为什么这个mongo查询返回的内容少于60而不是50到60之间的所有内容?

时间:2015-10-21 02:19:50

标签: mongodb

我参加了一个在线Mongo课程。他们提出的一个问题是以下查询会做什么:

db.scores.find( { score : { $gt : 50 }, score : { $lt : 60 } } );

我的第一个猜测是返回分数在50到60之间的所有对象,但正确答案是返回分数小于60的所有对象。为什么会这样?

2 个答案:

答案 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 } 
})