Использование побитового ИЛИ в MongoDB - PullRequest
0 голосов
/ 05 декабря 2018

Я работаю над проектом, в котором я хочу переключить значение между 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 ]

0 голосов
/ 05 декабря 2018

Числа, передаваемые в оболочке mongo, выводятся как double, чтобы соответствовать соглашениям в стиле javascript.Таким образом, 1 в {xor: 1} является double.

Вам потребуется указать NumberInt(1), чтобы получить 32-разрядное целое число (или NumberLong(1) для 64-разрядного целого числа).

Это поведение задокументировано здесь

0 голосов
/ 05 декабря 2018

Можете ли вы попытаться указать значение с помощью NumberInt .

db.players.update({name: "Patrick Mahomes"}, {$bit: {active: {xor:NumberInt(1)}}})

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

...