如何解决$ subtract在mongodb中无法与$ set一起使用
我正在使用以下查询更新mongodb中的文档,但它引发了错误The dollar ($) prefixed field '$subtract' in 'abc.$subtract' is not valid for storage.
const bulkUpdate = arrs.map(arr => {
const { val = 0 } = arr
return {
updateMany: {
filter: {
date: 20201010
},update: {
$set: {
abc: {
$subtract: [val,{ $add: [{ $ifNull: ['$a1',0] },{ $ifNull: ['$b1',0] } ] }]
}
},},}
})
if (bulkUpdate.length > 0) {
return mongoConnection.pool
.db('test')
.collection('testTable')
.bulkWrite(bulkUpdate)
}
谢谢前进
解决方法
$subtract和$ifNull不是更新运算符,因此您不能在更新中使用它们(管道更新中的a除外)。
如果您使用的是Mongo 4.2+版本,则可以使用管道更新来代替“文档更新”,如下所示:
{
updateMany: {
filter: {
date: 20201010
},update: [
{
$set: {
abc: {
$subtract: [val,{$add: [{$ifNull: ['$a1',0]},{$ifNull: ['$b1',0]}]}]
}
}
}
]
}
}
如果不是,那么您必须阅读每个文档并在4.2版之前更新sepratley,您将无法在尝试更新时访问文档字段。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。