Я заметил, что новый оператор $eq
освобожден от MongoDB 3.0
, и я не понимаю его цели. Например эти два запроса точно так же:
db.users.find({age:21})
и
db.users.find({age:{$eq:21}})
Кто-нибудь знает, почему это было необходимо?
Я заметил, что новый оператор $eq
освобожден от MongoDB 3.0
, и я не понимаю его цели. Например эти два запроса точно так же:
db.users.find({age:21})
и
db.users.find({age:{$eq:21}})
Кто-нибудь знает, почему это было необходимо?
Проблема заключалась в том, что вы должны обрабатывать равенства в отличие от сравнения, когда у вас была какая-то построитель запросов, так что
{ a : { $gt : 3 } }
{ a : { $lt : 3 } }
но
{ a : 3 }
равенства, которая выглядит полностью другой. То же самое относится к составу $not
, как уже указывал JohnnyHK. Кроме того, по сравнению с $eq
экономится от $
-переменные пользовательские строки. Поэтому люди asked for alternatives that are syntactically closer и это было реализовано. Билет Jira содержит более длительное обсуждение, в котором упоминаются все эти моменты.
Более четкий синтаксис оператора $eq
может также иметь смысл в структуре агрегации для сравнения двух полей, если должно быть реализовано such a feature.
Кроме того, функция, по-видимому, была около 2,5, была added to the documentation relatively late.
Одно конкретное приложение я могу видеть на $eq
это со случаями, как $not
оператора, требует, что его значение является operator-expression
.
Это позволяет построить запрос типа:
db.zips.find({state: {$not: {$eq: 'NY'}}})
До, ближе всего вы могли бы получить на это семантический было:
db.zips.find({state: {$not: {$regex: /^NY$/}}})
Я понимаю, что есть и другие способы, чтобы представить функциональности этого запроса, но если вам нужно использовать оператор $not
по другим причинам, это позволило бы это сделать.
До этого вы могли бы использовать' $ ne' (но вы, вероятно, знаете это) :) –
Странно. Я думал, что этот оператор существует долгое время. –
@SergioTulentsev Он всегда был там. Единственное, что является новым, это документация. Так что все ответы довольно забавные. –
@ user2864740 Действительно, в этих документах упоминается, что такие запросы ('{age: 21}' и '{age: {$ eq: 21}}') равны: http://docs.mongodb.org/ manual/reference/operator/query/eq/ – Messa
@Messa Как смущающе, у меня была неправильная страница open :( – user2864740
Да, это выглядит запутанным :) Может быть, '$ eq' (в« обычных »запросах) состоит в том, чтобы различать« null » 'и отсутствующий ключ. Но я не могу проверить это сейчас. – Messa