【问题标题】:How to update objects in document's array (mongodb)如何更新文档数组中的对象(mongodb)
【发布时间】:2021-12-29 19:33:22
【问题描述】:

假设我有以下文件:

{
  name: 'any-name',
  array: [
    { _id: 'any-id', a: 'any-a-data', b: 'any-b-data', c: 'any-c-data' },
    ...more objects
  ]
}

我想调用 updateOne 方法并使用 _id = 'any-id' 使用以下对象更新数组中的整个对象

{ a: 'new-a-data', b: 'new-b-data', c: 'new-c-data' }

所以结果将是:

{
  name: 'any-name',
  array: [
    { _id: 'any-id', a: 'new-a-data', b: 'new-b-data', c: 'new-c-data' },
    ...more objects
  ]
}

我尝试类似:

model.updateOne(
      { 'array._id': _id }, 
      { $set: { 'array.$': data } }
    )

data = { a: 'new-a-data', b: 'new-b-data', c: 'new-c-data' }

有人可以帮我吗?

【问题讨论】:

  • 你用的是快递吗?
  • 是的,我正在使用快递
  • 答案无效?

标签: arrays mongodb mongoose mongodb-query


【解决方案1】:

更新文档前需要解析新数据:

var { newA } = data;

Model.findOneAndUpdate({ 'array._id': 'any-id' }, {
    '$set': {
        'array.$.a': newA
    }
})
.then((data) => { console.log(data); res.redirect('/') })
.catch((err) => res.status(500).send("Error: ", err));

【讨论】:

  • 这个答案部分有效。我只想更新新值,例如如果我没有“newA”值,“array.$.a”将为空
  • 尝试 findOneAndUpdate 而不是 updateOne,它应该可以工作。
猜你喜欢
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2018-09-05
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多