0

我正在做一个项目,我想在我的 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}})

这最终将成为在网站上单击按钮以在两种不同状态之间切换的功能。

4

2 回答 2

0

您能否尝试使用NumberInt提供价值。

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

在此处检查文档

于 2018-12-05T20:22:20.973 回答
0

在 mongo shell 中传递的数字被推断为double匹配 javascript 样式的约定。所以1in{xor: 1}是一个double.

您需要指定NumberInt(1)获取 32 位整数(或NumberLong(1)64 位整数)。

此处记录了此行为

于 2018-12-05T20:22:59.500 回答