Я заметил новый $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
избавляет вас от необходимости использовать строки $
-escape, предоставленные пользователем. Поэтому люди попросили альтернативы синтаксически ближе, и это было реализовано. Билет Jira содержит более длительное обсуждение, в котором упоминаются все эти моменты.
Более ясный синтаксис оператора $eq
может также иметь смысл в структуре агрегации для сравнения двух полей, если такая функция будет реализована.
Кроме того, эта функция, по-видимому, была около 2,5, была добавлена в документацию относительно поздно.
Одно конкретное приложение, которое я могу видеть для $eq
, имеет такие случаи, как оператор $not
, который требует, чтобы его значение было operator-expression
.
Это позволяет построить такой запрос, как:
db.zips.find({state: {$not: {$eq: 'NY'}}})
До этого ближе всего вы могли бы получить семантически:
db.zips.find({state: {$not: {$regex: /^NY$/}}})
Я понимаю, что существуют другие способы представления функциональности этого запроса, но если вам нужно использовать оператор $not
по другим причинам, это теперь позволит ему.