我的文件结构如下:-
{ _id : "60ffa03fe124375b21cf5bf1",
nextLength : 4,
arr : [0,0,0,0,0,0]
}
这个 nextLength
字段表示应推送到指定位置的元素数 arr
下一个字段中的字段 $push
到 arr
领域每次 arr
场地被推倒了 nextLenght
现场将是 $inc
通过 1
. 所以在接下来的 $push
到 arr
场地应该推挤 4
进入 arr
场与 nextLength
应该增加到5。
更新后的预期结果
{ _id : "60ffa03fe124375b21cf5bf1",
nextLength : 5,
arr : [0,0,0,0,0,0,0,0,0,0] }
为什么它应该是原子的
此文档将经常更新,读取和更新操作应同时执行,并使用一个查询,因为每次执行更新时,我都将旧文档的下一个长度值存储在另一个集合中。
到目前为止,我的工作是使用mongodb聚合管道。
const resultBeforeUpdate= await TestModel.collection.findOneAndUpdate(
{
_id: "60ffa03fe124375b21cf5bf1",
},
[
{
$set: {
arr: {
$concatArrays: [
"$arr",
{
$function: {
body: function (nextLenght) {
return new Array(nextLength).fill(0);
},
args: ["$$this.nextLength"],
lang: "js",
},
},
],
},
},
},
{
$set: {
nextLength: {
$function: {
body: function (previousLength) {
return previousLength + 1;
},
args: ["$$this.nextLenght"],
lang: "js",
},
},
},
},
],
{ new: false,}
);
我的代码失败,出现以下错误
uncaught exception: Error: findAndModifyFailed failed: {
"ok" : 0,
"errmsg" : "Invalid $set :: caused by :: Use of undefined variable: this",
"code" : 17276,
"codeName" : "Location17276"
}
我是mongodb的新手。我相信会有另一种方法来实现这一目标。提前感谢您抽出时间。
暂无答案!
目前还没有任何答案,快来回答吧!