Использование побитового ИЛИ в MongoDB
Я работаю над проектом, в котором я хочу переключить значение между 0 и 1 в моей базе данных Mongo. Я установил каждое значение от двойного по умолчанию до 32-битного Int. Однако каждый раз, когда я запускаю этот код, я получаю эту ошибку:
> db.players.update({name: "Patrick Mahomes"}, {$bit: {active: {xor:1}}})
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 2,
"errmsg" : "The $bit modifier field must be an Integer(32/64 bit); a
'double' is not supported here: {xor: 1.0}"
}
Есть идеи, почему это происходит? Когда я запрашиваю активный тип поля, он возвращает все объекты в моей базе данных.
> db.players.find({active: {$type:16}})
Это в конечном итоге станет функциональностью за щелчком кнопки на веб-сайте для переключения между двумя различными состояниями.
2 ответа
Числа, передаваемые в оболочке монго, выводятся как double
чтобы соответствовать соглашениям в стиле JavaScript. Итак 1
в {xor: 1}
это double
,
Вам нужно будет указать NumberInt(1)
получить 32-разрядное целое число (или NumberLong(1)
для 64-разрядного целого числа).
Это поведение задокументировано здесь
Можете ли вы попытаться предоставить значение с NumberInt.
db.players.update({name: "Patrick Mahomes"}, {$bit: {active: {xor:NumberInt(1)}}})
Проверьте документ здесь.