【问题标题】:MongoDB | update object in array updates different object then given parametersMongoDB |更新数组中的对象更新不同的对象然后给定参数
【发布时间】:2021-03-04 09:04:29
【问题描述】:

更新查询不会更新特定对象,而是更新与question 匹配且距离数组开头最近的对象,它不采用看起来像的id 参数。

为什么它不起作用?

console.log({id, question, answer, pollId});

Poll.findOneAndUpdate(
  {
    _id: pollId,
    "answers.id": id,
    "answers.question": question,
  },
  {
    $set: {
      "answers.$.answer": answer,
    },
  }
).then((p) => console.log(p.answers.filter((a) => a.id === id)[0]));

控制台输出:

//first log
{
  id: '603923508d957f957770c64f',
  question: 0,
  answer: 2,
  pollId: '603ca13cd027bd4b3013e9cc'
}
//second log
{
  id: '603923508d957f957770c64f',
  question: 0,
  answer: 0,
  pollId: '603ca13cd027bd4b3013e9cc'
}

【问题讨论】:

  • pollId,idquestion在第一个和第二个日志中是一样的。
  • 是的,我知道,因为我只更新对象的answer 属性。第一个日志是所需的对象,更新后的对象看起来应该是一样的,但事实并非如此。
  • 我们可以看一个之前/之后文档的例子吗?
  • 如果您使用的是 mongoose 库。默认情况下,findOneAndUpdate() 返回应用更新之前的文档。设置new: true 获取更新数据。例如:findOneAndUpdate(conditions, update, {new: true})
  • 与 { new: true } 记录的输出是相同的,遗憾的是。

标签: arrays mongodb object


【解决方案1】:

更新期间 db 的图像

如您所见,它更新了数组中的第一个文档,但更新查询与 id 属性不匹配。

问题中描述了查询。

before update

after update

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    相关资源
    最近更新 更多