我在使用“||”和“”&&&“条件操作查询时看到了意想不到的结果。看起来这是一个错误。
版本:
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,班加罗尔
答案 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”进行评估。 作为||只需要第一个真值,然后退出。