Node.js Mongodb切换布尔运算符不工作



你好,我有一个奇怪的问题

我看了前面的几个问题,但是遇到了一个问题

基本上我有一个包含布尔值

的文档这个布尔值叫做enabled

我想使用findOneAndUpdate函数来切换它

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

这是我根据前面的问题得出的结论

然而,当我尝试它时,这是结果

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

这是我的完整代码

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

问题是您试图在遗留更新中使用$not聚合操作符。

为了使用聚合操作符,你需要使用Updates with aggregation Pipeline。

对于您的示例,这应该像在数组中包装更新一样简单:

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

可以使用$bit操作符用于切换启用字段的值。

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

在每次更新时,值启用将切换(1到0,0到1)。

或者,您可以这样使用set方法:

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

最新更新