2016-01-02 6 views
0

Когда я прочитал MongoDB документ для каждого оператора в запросе, например here,Зачем нужен BSON тип BSON?

документ всегда упоминают

Для сравнения различных значений типа BSON см specified BSON comparison order.

Я следую ссылке на эту страницу и читаю документ. Я понимаю, что такое BSON, но в этом контексте я не считаю, что порядок сравнения BSON имеет значение.

вопрос:

Что является использование порядка сравнения BSON? Почему это актуально здесь? Если возможно, можете ли вы привести пример?

+0

Довольно точно это связано со скоростью. Если вы можете сравнить целые числа или логические значения по датам или регулярным выражениям, это будет более оптимальным.Это скорее слухи о креслах, чем что-либо. – Catalyst

ответ

0

Список пытается рассказать вам, что при использовании двух типов BSON, которые вы пытаетесь сравнить, например, строки и массива, как они будут сравниваться? (так как нужно преобразовать в другой)

Взяв пример чуть дальше в документации, предположим, что у вас есть коллекция, в которой все документы имеют поле arr, но разных типов (некоторые из них являются массивами, некоторые из них являются числовой). Вы попробуете

db.coll.find().sort({arr: -1}) 

Здесь Mongo будет сравнивать все документы вместе, чтобы решить, какой порядок их вернуть.

1-й список документов, типы которых имеют приоритет. Например, Numbers (# 3) имеет более высокий приоритет, чем Array (# 6), и поэтому Array необходимо преобразовать в Number при сравнении массива с номером.

В документации далее указывается, что массив преобразуется в число, выбирая его самый большой или самый маленький элемент на основе порядка сортировки (восходящий/нисходящий).

+0

Но я храню все данные в JSON, а не BSON. Поэтому порядок сравнения BSON для меня не имеет значения. Это верно? Есть ли порядок сравнения JSON? –

+0

Если вы сохраняете свой JSON в Mongo, он автоматически преобразуется в BSON. JSON - это строковая форма, BSON - двоичная форма. Это более эффективно, поскольку строки JSON необходимо анализировать в соответствующих структурах данных каждый раз, когда вы их читаете - BSON пропускает этот шаг. –

+0

Спасибо, что объяснили это мне! –

1

В чем заключается использование порядка сравнения BSON?

Для сравнения двух значений и определения того, являются ли они равными или один больше или меньше другого. Все значения в MongoDB представлены как BSON.

Почему это уместно?

Потому что вы смотрите на оператора сравнения, и вам нужно знать, что означает сравнение. Если $lt возвращает записи, где заданное поле меньше некоторого значения, вам необходимо знать , когда значение в поле считается меньше этого значения, а когда нет. При сравнении двух значений одного и того же типа сравнение определяется семантикой этого типа (которые в основном интуитивно понятны, с некоторыми конкретными подробностями, перечисленными ниже). Но сравнение и сортировка полезны только в том случае, если любой два значения сопоставимы, поэтому есть также порядок по типам, который определяет результат, если сравнивать два разных типа.