2013-10-08 1 views
-1

Я вижу неожиданный результат при запросе с помощью «||» и «» & & «операции кондиционирования. Похоже, это ошибка.MongoDB: Операторы Conditon "||" и «&&» возвращает неожиданный результат

Версия:

C: \ MongoDB \ Bin> mongo.exe -версия MongoDB версия оболочки: 2.4.6

C: \ MongoDB \ Bin> C: \ MongoDB \ Bin> mongod .exe -версия дб версия v2.4.6 Вт 8 октября 16: 08: 54,073 версия мерзавец: b9925db5eac369d77a3a5f5d98a145eaaacd9673

базы данных записей: ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~

C: \ MongoDB \ Bin>

>

db.cars.find() { "_id": 100, "доступен": 1, "цвет": "красный", " имя ":" GTO "," год ": 3939}

db.cars.find ({доступно: 1, год: 3939}) {" _id ": 100," available ": 1," color " : "красный", "имя": "GTO", "год": 3939}

>

db.cars.find ({$, где: "this.available == 1" & & "this.year == 3939"}) { "_id": 100, "доступен": 1, " цвет ": "красный", "имя": "GTO", "год": 3939}

> >

db.cars.find ({$, где:" this.available == 1 "|| «this.year == 3939»}) {«_id»: 100, «доступно»: 1, «цвет»: «красный», «имя»: «GTO», «год»: 3939}

Проблема видел: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Следующая команда использует OR условие (т. е. используя ||), и только одно условие истинно. Но запись не отображается. Это неверно.

db.cars.find ({$, где: "this.available == 11" || "this.year == 3939"})

Следующая команда использует и условия работы (т.е. с использованием & &) и только одно условие истинно, но отображается сообщение, которое является неправильным. Для условия AND оба выражения должны возвращать TRUE.

db.cars.find ({$, где: "this.available == 11" & & "this.year == 3939"}) { "_id": 100, "доступен": 1, "цвет" : «красный», «имя»: «GTO», «год»: 3939)

Пожалуйста, дайте мне знать, если я пропустил что-либо.

С уважением Jayanna Hallur аналитик Big Data, Wipro Technologies, Бангалор

ответ

2

Ваш $, где утверждение неверно. Должна быть непрерывная строка 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» не производится. As || просто нужно первое истинное значение, а затем выходит.