提问者:小点点

在Mongoose中更新数据时,防止对象数组中的对象索引重新排序


这是我的Todo文档的结构:

下面是我的更新查询:

null

Todo
  .updateOne({ 'tasks._id': taskId }, { $set: { 'tasks.$.name': task.name, 'tasks.$.dueDate': task.dueDate, 'tasks.$.labels': task.labels } })
  .then((result) => {
    res.status(200).json(result);
  })
  .catch((err) => {
    res.status(400).json(err);
  });

null

每当我更新一个任务时,例如,那个索引为0的任务,它就会将其索引更改为最后一个索引。为什么会这样?


共1个答案

匿名用户

您需要提供准确的索引以便进行更新,例如

'tasks.$.name': task.name should be `'tasks.0.name': task.name` 

set尝试用您提供的索引查找一个字段,如果他没有找到它,它将创建一个新的字段并将其设置为值,这正是您的情况所发生的