Почему запросы MongoDB используют $ gt и $ lte вместо> и <=? - PullRequest
6 голосов
/ 28 декабря 2010

Я новичок в MongoDB.Кажется, он построен на синтаксисе JavaScript.Почему он не может использовать более четкие операторы сравнения, такие как < и >= вместо $gt и $lte?

Пример из онлайн-оболочки:

db.scores.find({a: {'$gte': 2, '$lte': 4}});

Ответы [ 2 ]

8 голосов
/ 28 декабря 2010

Я предполагаю, что они чувствовали, что слишком часто вы забудете цитаты и напишите {a: {>: 2}}.В JavaScript и некоторых других языках вполне нормально не указывать кавычки при написании $gte (например, {a: {$gte: 2, $lte: 4}} работает, как и {"a": {"$gte": 2, "$lte": 4}}. Это экономит много времени при наборе текста в монгоshell.

Я не уверен, что вы спрашиваете об этом, но позвольте мне ответить на вопрос, почему язык запросов больше не похож на SQL, например, почему мы не можем написать запрос как a >= 2 && a <= 4 (кроме $where запросов). Причина этого в том, что единственный способ выполнить этот запрос - это проанализировать JavaScript и выполнить для каждого документа. Было бы невозможно использовать индексы, и каждый документ имел быдля преобразования из данных BSON, хранящихся на диске, в объект JavaScript в памяти (и, кстати, это то, что происходит при выполнении запроса $where, сокращении группы или карты).

элегантность использования нотации JSON / BSON для запросов заключается в том, что они являются чистыми данными и могут обрабатываться и анализироваться как на стороне клиента, так и на стороне сервера. На сервере запрос никогда не проходитинтерпретатор JavaScript, скорее он подается в планировщик запросов, который разбирает его на части, формулирует план и выполняет его.На клиенте запрос может быть построен с использованием собственных структур данных языка клиента и преобразован в универсальное представление (т. Е. BSON) только при передаче на сервер.

5 голосов
/ 28 декабря 2010

Позволяет встраивать код MongoDB в документ HTML или XML без необходимости связываться с сущностями (&lt; и &gt;) или CDATA.

...