Javascript $subtract不使用mongodb中的$set
我正在使用以下查询更新mongodb中的文档,但它向我抛出了一个错误,Javascript $subtract不使用mongodb中的$set,javascript,mongodb,aggregate,Javascript,Mongodb,Aggregate,我正在使用以下查询更新mongodb中的文档,但它向我抛出了一个错误,abc中的美元($)前缀字段“$subtract”。$subtract”对存储无效。 const bulkUpdate = arrs.map(arr => { const { val = 0 } = arr return { updateMany: { filter: { date: 20201
abc中的美元($)前缀字段“$subtract”。$subtract”对存储无效。
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)
}
Thank是advance,不是update操作符,因此不能在更新中使用它们(管道更新中除外)
如果您使用的是Mongo 4.2+版,则可以使用管道更新而不是“文档更新”,如下所示:
如果您不是,那么您必须阅读每个文档并将其更新到sepratley版本4.2之前的版本。您在尝试更新时无法访问文档字段。并且不是更新操作符,因此您不能在更新中使用它们(管道更新中的除外)
如果您使用的是Mongo 4.2+版,则可以使用管道更新而不是“文档更新”,如下所示:
如果您没有,那么您必须阅读每个文档并在4.2版之前对其进行更新。您在尝试更新时无法访问文档字段。可能您有一个mongodb的早期版本,该版本不允许在更新中使用聚合(4.2版之前)。您可以找到更多信息。可能您有一个mongodb的早期版本,它不允许在更新中使用聚合(4.2之前)。你可以找到更多的信息。
{
updateMany: {
filter: {
date: 20201010
},
update: [
{
$set: {
abc: {
$subtract: [val, {$add: [{$ifNull: ['$a1', 0]}, {$ifNull: ['$b1', 0]}]}]
}
}
}
]
}
}