使用$ set / $ push更新子文档数组的许多子元素

以下是示例工作区文档。我想在前端拖放时更新框的位置。

{
"_id": ObjectId("5eaa9b7c87e99ef2430a320b"),
"logo": {
    "url": ".../../../assets/logo/dsdsds.png",
    "name": "testUpload"
},
"name": "My World",
"sections": [{
        "box": [{
                "_id": ObjectId("5da87b33502d6c634b3aa7ce"),
                "name": "Meran To",
                "position": 0
            },
            {
                "_id": ObjectId("5da87b33502d6c7d873aa7d0"),
                "name": "Documentation",
                "position": 2
            },
            {
                "_id": ObjectId("5da87b33502d6cdbb93aa7cf"),
                "name": "File Manager Upload File Drive",
                "position": 1
            },
            {
                "_id": ObjectId("5da87b33502d6c276a3aa7cd"),
                "name": "File Manager Upload File Drive",
                "position": 1
            }
        ],
        "id": 1,
        "title": "Simplicity",
        "description": "Follow your barriers"
    },
    {
        "box": [],
        "id": 2,
        "title": "xfxdfxcx 34",
        "description": "sdsdsd sfsfsd ewrewrewre"
    }
]
}

我通过API将更新后的职位从前端发送到后端,如下所示。

[
 {
   "id": "5da87b33502d6c634b3aa7ce",
   "position": 0
 }, {
   "id": "5da87b33502d6c7d873aa7d0",
   "position": 1
 }, {
   "id": "5da87b33502d6cdbb93aa7cf",
   "position": 2
 }, {
   "id": "5da87b33502d6c276a3aa7cd",
   "position": 3
}]

我目前正在使用以下代码更新数据库

for (const el of req.body) {
  await this.model.updateOne({
    _id: req.params.workspaceId,
    sections: {
        $elemMatch: {
            id: req.params.sectionId
        }
    },
    'sections.box': {
        $elemMatch: {
            _id: el.id
        }
    },
  }, {
    $set: {
        'sections.$[outer].box.$[inner].position': el.position
    }
  }, {
    arrayFilters: [{
        'outer.id': req.params.sectionId
    }, {
        'inner._id': el.id
    }],
    upsert: false,
  });
}

但这不是最佳方法,它会多次击中数据库。 所以我需要用猫鼬查询本身来优化此代码。 可能正在使用$ set / $ push。我不知道任何确切的方法。

因此,基本上我们需要删除外部的for循环并使其与猫鼬本身一起工作。这是我的要求。

预先感谢所有支持。