Почему NumberInt(1) == NumberInt(1) // false
?
Предыстория: я написал скрипт MongoDB для сравнения документов по некоторым полям. После нескольких часов копания я обнаружил, что сравнение NumberInt
работает не так, как я ожидал.
Как сравнить число? Я делаю:
1 ответ
Вы правильно проводите сравнение. Оболочка MongoDB по сути представляет собой интерактивную оболочку javascript. Если вы сделаете typeof NumberInt(1)
в оболочке, он скажет вам, что это объект. Таким образом, вы не можете ожидать, что объект будет равен другому объекту. Вот почему NumberInt(1) == NumberInt(1) => false
.
Поскольку вас интересует сравнение только значений, здесь могла бы помочь функция .value
. Но быстрая проверка свойств объекта ничего не дает:
> Object.keys(NumberInt(1))
[ ]
> Object.getOwnPropertyNames(NumberInt(1))
[ ]
Как видите, нет никакого свойства, которое можно было бы использовать для определения значения объекта. Как говорится в документе, NumberInt
- это просто конструктор/оболочка для создания 32-битных целых чисел, поскольку оболочка mongo по умолчанию обрабатывает все числа как значения с плавающей запятой.
Похожие вопросы
Новые вопросы
mongodb
MongoDB - это масштабируемая, высокопроизводительная база данных NoSQL с открытым исходным кодом, ориентированная на документы. Он поддерживает большое количество языков и платформ разработки приложений. Вопросы по администрированию сервера можно задать на https://dba.stackexchange.com.
{ n: NumberInt(1) }
в коллекции, вы можете запросить его какdb.test.find( { n: NumberInt(1) } )
, чтобы получить документ.