Использование побитового ИЛИ в 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)}}})

Проверьте документ здесь.

Другие вопросы по тегам