你好,我有一个奇怪的问题
我看了前面的几个问题,但是遇到了一个问题
基本上我有一个包含布尔值
的文档这个布尔值叫做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) {})