-1

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

版本:

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

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

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

C:\mongodb\bin>

>

db.cars.find() {“_id”:100,“可用”:1,“颜色”:“红色”,“名称”:“GTO”,“年份”: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", “名称”:“GTO”,“年份”:3939 }

> >

db.cars.find( { $where: "this.available == 1" || "this.year == 3939" }) { "_id" : 100, "available" : 1, "color" : "red" ,“名称”:“GTO”,“年份”: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", “名称”:“GTO”,“年份”:3939 }

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

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

4

1 回答 1

2

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

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

代替 :

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

评估的语句被认为是真值。所以考虑一下:

"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"

将返回 year = 3939 的所有文档,而不管可用值如何。因为 && 需要检查所有操作数。

"this.available == 1" || “今年 == 3939”

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

于 2013-10-08T11:17:15.243 回答