Какова цель $eq

Я заметил новый $eq оператор, выпущенный с помощью MongoDB 3.0, и я не понимаю его цели. Например, эти два запроса точно такие же:

db.users.find({age:21})

и

db.users.find({age:{$eq:21}})

Кто-нибудь знает, почему это было необходимо?

Ответ 1

Проблема заключалась в том, что вам пришлось бы обрабатывать равенство по-другому от сравнения, если у вас был какой-то построитель запросов, поэтому он

{ a : { $gt : 3 } }
{ a : { $lt : 3 } }

но

{ a : 3 }

для равенства, которое выглядит совершенно иначе. То же самое относится к составу $not, как уже указывал JohnnyHK. Кроме того, сравнение с $eq избавляет вас от необходимости использовать строки $ -escape, предоставленные пользователем. Поэтому люди попросили альтернативы синтаксически ближе, и это было реализовано. Билет Jira содержит более длительное обсуждение, в котором упоминаются все эти моменты.

Более ясный синтаксис оператора $eq может также иметь смысл в структуре агрегации для сравнения двух полей, если такая функция будет реализована.

Кроме того, эта функция, по-видимому, была около 2,5, была добавлена ​​в документацию относительно поздно.

Ответ 2

Одно конкретное приложение, которое я могу видеть для $eq, имеет такие случаи, как оператор $not, который требует, чтобы его значение было operator-expression.

Это позволяет построить такой запрос, как:

db.zips.find({state: {$not: {$eq: 'NY'}}})

До этого ближе всего вы могли бы получить семантически:

db.zips.find({state: {$not: {$regex: /^NY$/}}})

Я понимаю, что существуют другие способы представления функциональности этого запроса, но если вам нужно использовать оператор $not по другим причинам, это теперь позволит ему.