在 MongoDB 中使用按位或

问题描述 投票:0回答:2

我正在开发一个项目,我想在 Mongo 数据库中切换 0 和 1 之间的值。我已将每个值从默认的双精度值设置为 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}})

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

mongodb mongodb-query bitwise-xor
2个回答
0
投票

在 mongo shell 中传递的数字被推导为

double
以匹配 javascript 风格的约定。所以
1
中的
{xor: 1}
double

您需要指定

NumberInt(1)
来获取 32 位整数(或
NumberLong(1)
来获取 64 位整数)。

此行为已记录在此处


0
投票

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

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

查看文档这里。

© www.soinside.com 2019 - 2024. All rights reserved.