【问题标题】:Mongoose: Update does not work in nested array objectMongoose:更新在嵌套数组对象中不起作用
【发布时间】:2016-03-31 02:33:33
【问题描述】:

我有一个包含对象数组的文档,一个对象包含多个对象我想用$set 更新内部对象但没有得到任何运气。 任何人都可以给我任何提示以便我解决它吗?

这是我的对象:

{
  "_id": ObjectId("56fbfafdf86fa6161911d104"),
  "site": "xyz",
  "adsPerCategory": NumberInt(2),
  "sampledAt": ISODate("2016-03-30T16:12:45.138+0000"),
  "items": [
    {
      "id": "4563873",
      "content": {
        "title": "WATER DISTILLERS",
        "body": "Perfect to save money.",
      }
    },
    {
      "id": "4563s23232873",
      "content": {
        "title": "Cola water",
        "body": "Perfect for body.",
      }
    }
  ]
}

我要更新body

目前,我已经给出了single object,但它可以是多个。

这是我尝试过的

models.Sample.update(
  {
    _id: samples._id
  },
  '$set': {
    'items.0.content.body': body.description
  },
  function(err, numAffected) {
    console.log(err);
    console.log('Affected....', numAffected);
  }
);

如果我输入0 效果很好,但我想让它动态化。

点赞'items.index.content.body': body.description

谢谢。

【问题讨论】:

  • 你的意思是,你想更新所有具有相同正文内容的项目?
  • 不,items 有多个对象,每个对象都有不同的正文内容,所以我使用foreach 来迭代和更新具有不同内容的所有正文
  • 我刚刚更新了body值。

标签: node.js mongodb mongoose


【解决方案1】:

我认为你可以做这样的事情。

models.Sample.find({ _id: ObjectId(samples._id) })
   .forEach(function (doc) {
       doc.items.forEach(function (element, index, array) {
          items[index].content.body = body.description;
        });
   models.Sample.save(doc);
 });

【讨论】:

  • 我已经尝试过了,但没有成功,除了数组项之外,所有内容都会更新
  • 您可以尝试设置doc.markModified('doc.items') 看看是否有帮助?放在models.Sample.save(doc);之前就行了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
  • 2023-01-18
  • 1970-01-01
相关资源
最近更新 更多