这是我的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的任务,它就会将其索引更改为最后一个索引。为什么会这样?
您需要提供准确的索引以便进行更新,例如
'tasks.$.name': task.name should be `'tasks.0.name': task.name`
set尝试用您提供的索引查找一个字段,如果他没有找到它,它将创建一个新的字段并将其设置为值,这正是您的情况所发生的