MongoDB:条件运算符“||”和“&&”返回意外结果

时间:2013-10-08 11:12:14

标签: mongodb mongodb-query

我在使用“||”和“”&&&“条件操作查询时看到了意想不到的结果。看起来这是一个错误。

版本:

C:\ mongodb \ bin> mongo.exe -version MongoDB shell版本:2.4.6

C:\ mongodb的\ BIN> C:\ mongodb \ bin> mongod.exe -version db版本v2.4.6 Tue Oct 08 16:08:54.073 git version:b9925db5eac369d77a3a5f5d98a145eaaacd9673

数据库记录: ~~~~~~~~~~~~~~~~~~~~~~~~~~~

C:\ mongodb的\ BIN>

>

  

db.cars.find()   {“_ id”:100,“available”:1,“color”:“red”,“name”:“GTO”,“year”:3939}

     

db.cars.find({available:1,year:3939})   {“_ id”:100,“available”:1,“color”:“red”,“name”:“GTO”,“year”:3939}

>

  

db.cars.find({$ where:“this.available == 1”&&“this.year == 3939”})   {“_ id”:100,“available”:1,“color”:“red”,“name”:“GTO”,“year”:3939}

> >

  

db.cars.find({$ where:“this.available == 1”||“this.year == 3939”})   {“_ id”:100,“available”:1,“color”:“red”,“name”:“GTO”,“year”:3939}

看到的问题: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  以下命令使用OR条件操作(即使用||),只有一个条件为真。但仍然没有显示条目..这是不正确的。      

db.cars.find({$ where:“this.available == 11”||“this.year == 3939”})

     下面的命令使用AND条件操作(即使用&&),只有一个条件为真,但显示的条目不正确。对于AND条件,表达式都应返回TRUE。      

db.cars.find({$ where:“this.available == 11”&&“this.year == 3939”})   {“_ id”:100,“available”:1,“color”:“red”,“name”:“GTO”,“year”:3939}

如果我错过了什么,请告诉我。

此致 Jayanna Hallur 大数据分析师, Wipro Technologies,班加罗尔

1 个答案:

答案 0 :(得分:2)

您的$ where语句不正确。 它应该是包含逻辑运算符的连续javascript字符串。

"this.available == 1 && this.year == 3939" 

而不是:

"this.available == 1" && "this.year == 3939" 

评估报表被视为Truthy值。 所以考虑一下:

"this.available == 1 && this.year == 3939"  -->   TRUE  && TRUE
 "this.available == 1 || this.year == 3939 || this.favorite == 0" --> TRUE || TRUE || TRUE

通过使用多个语句,mongodb解释器将根据逻辑运算符计算语句,并根据上次执行的语句给出结果,所以:

  

“this.available == 1”&& “this.year == 3939”

无论可用价值如何,

都会返回年份= 3939的所有文件。 作为&&需要检查所有操作数。

  

“this.available == 1”|| “this.year == 3939”

将根据可用值给出所有值,并且不会对“this.year”进行评估。 作为||只需要第一个真值,然后退出。