javascript Node.js Mongodb切换布尔运算符不起作用

2sbarzqh  于 2023-01-01  发布在  Java
关注(0)|答案(2)|浏览(162)

你好我有一个奇怪的问题
我看了前面的几个问题,但我遇到了一个问题
基本上我有一个包含布尔值的文档
此布尔值称为enabled
我想使用findOneAndUpdate函数切换它

{ $set: { enabled: { $not: "$enabled" } } }

这是我根据前面的问题得出的结论
但是当我尝试的时候结果就是这样

enabled: { '$not': '$enabled' }

下面是我的完整代码

db.findOneAndUpdate({
    _id: "Sample"
}, {
    $set: {
        enabled: {
            $not: "$enabled"
        }
    }
}, {
    new: true
}, function(err, result) {})
s4n0splo

s4n0splo1#

问题是您试图在遗留更新中使用$not聚合操作符。
为了使用聚合运算符,您需要使用带有聚合管道的更新。
对于您的示例,这应该非常简单,只需将更新 Package 在一个数组中,如下所示:

db.findOneAndUpdate({
    _id: "Sample"
},[{
    $set: {
        enabled: {
            $not: "$enabled"
        }
    }
}], {
    new: true
}, function(err, result) {})
f87krz0w

f87krz0w2#

可以使用**$bit**运算符切换启用字段的值。

db.findOneAndUpdate({
    _id: "Sample"
}, {
   { $bit: { enabled: { xor: 1 } } }
}, {
    new: true
}, function(err, result) {})

每次更新时,值enabled将切换(1到0,0到1)。
或者,您可以按如下方式使用set方法:

db.findOneAndUpdate({
            _id: "Sample"
        }, [{
    $set: {
        enabled: {
            $not: "$enabled"
        }
    }
}], {
      new: true
        }, function(err, result) {})

相关问题