使用findOneAndUpdate在mongoose中进行布尔切换

hmae6n7t  于 2023-01-13  发布在  Go
关注(0)|答案(1)|浏览(105)

我在node js中使用了mongoose,并且我想进行一个布尔切换,但是当我使用findOneAndUpdate(正如我所写的)时,我得到的“done”为false,但是第二次“done”不是true
最后,我想得出这样的逻辑:单击按钮时,如果“done”为true且相同,则它应变为false;如果为false,则它应变为true

{
  "_id": "63be594eaceb91f14825b144",
  "tasksTitle": "Daily",
  "collectioner": "63bc41041e463e09c07db3fe",
  "collectionAuthor": "63b31ee65e03accdf60ca705",
  "tasksItems": [
    {
      "taskItemTitle": "exampleTitle",
      "deadline": 0,
      "done": true,
      "_id": "63be49f56c9c394d282b155f"
    }
  ]
}

argument "taskItemId: 63be49f56c9c394d282b155f"

tasksModel.findOneAndUpdate(
        {
          "tasksItems._id": taskItemId,
          tasksItems: {
            $elemMatch: {
              _id: taskItemId,
            },
          },
        },
        [{ $set: { tasksItems: { done: { $eq: [false, "$done"] } } } }],
        { new: true }
      );
9bfwbjaz

9bfwbjaz1#

最简单的解决方案可能是检索任务并独立更新taskItems

const task = await tasksModel.findOne({ 'tasksItems._id': taskItemId });
if (!task) return;
for (let i = 0; i < task.tasksItems.length; i++) {
  if (task.tasksItems[i]._id !== taskItemId) continue;
  task.tasksItems[i].done = !task.tasksItems[i].done;
}
await task.save();

相关问题