在MongoDB中使用按位或

时间:2018-12-05 20:13:40

标签: mongodb mongodb-query bitwise-xor

我正在一个项目中,想要在Mongo数据库中的0和1之间切换一个值。我已将每个值从默认的double设置为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 :(得分:0)

您能否尝试通过 NumberInt 提供价值。

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

检查文档here.

答案 1 :(得分:0)

在mongo shell中传递的数字被推导为double以匹配javascript样式的约定。因此1中的{xor: 1}double

您需要指定NumberInt(1)来获得32位整数(对于64位整数,则需要NumberLong(1))。

此行为已记录为here