enter image description here

Почему NumberInt(1) == NumberInt(1) // false?

Предыстория: я написал скрипт MongoDB для сравнения документов по некоторым полям. После нескольких часов копания я обнаружил, что сравнение NumberInt работает не так, как я ожидал.

Как сравнить число? Я делаю:

enter image description here

0
Dipak Telangre 16 Дек 2019 в 15:43
Я написал скрипт MongoDB для сравнения документов по некоторым полям. После нескольких часов копания я обнаружил, что сравнение NumberInt работает не так, как я ожидал. Пожалуйста, поделитесь этим скриптом.
 – 
prasad_
16 Дек 2019 в 16:10
В запросах MongoDB числа сравниваются с помощью операторов сравнения, таких как $eq, $gte и т. д. Например, если у вас есть документ { n: NumberInt(1) } в коллекции, вы можете запросить его как db.test.find( { n: NumberInt(1) } ), чтобы получить документ.
 – 
prasad_
16 Дек 2019 в 16:15

1 ответ

Вы правильно проводите сравнение. Оболочка MongoDB по сути представляет собой интерактивную оболочку javascript. Если вы сделаете typeof NumberInt(1) в оболочке, он скажет вам, что это объект. Таким образом, вы не можете ожидать, что объект будет равен другому объекту. Вот почему NumberInt(1) == NumberInt(1) => false.

Поскольку вас интересует сравнение только значений, здесь могла бы помочь функция .value. Но быстрая проверка свойств объекта ничего не дает:

> Object.keys(NumberInt(1))
[ ]
> Object.getOwnPropertyNames(NumberInt(1))
[ ]

Как видите, нет никакого свойства, которое можно было бы использовать для определения значения объекта. Как говорится в документе, NumberInt - это просто конструктор/оболочка для создания 32-битных целых чисел, поскольку оболочка mongo по умолчанию обрабатывает все числа как значения с плавающей запятой.

0
Rahul Sharma 16 Дек 2019 в 16:24