我有一个Mongoose文档,其中包含一系列子文档,如下所示:

var RegionSchema = new Schema({
  "metadata": {
    "regionType": String,
    "name": String,
    "children": [{
      "name": String,
      "childType": String,
      "id": Schema.ObjectId
    }],
    "parent": Schema.ObjectId
  },

  "data": [DataContainer]
});


DataContainer架构中,我想创建一个可以更新其内部数据的实例方法。

为了清楚起见,我希望能够查找Region,在DataContainer数组中找到一个data,然后调用dataCont.update()之类的东西,其中DataContainer实例可以执行this.save()。这可能吗?

在做

this.save(function(err, saved) {
  console.log(saved)
  callback(err, saved);
});


DataContainer实例方法内部将打印出undefined。回调被击中。

最佳答案

如果data属性是子文档,则可以轻松使用populate并对其进行更新:

Region.findOne({ _id: regionId })
  .populate('data')
  .exec(function (err, region) {
    // ...

    var data = region.data, // data container
        dataItem = data[0];

    dataItem.property = 'some value';
    dataItem.save(function (err, item) {
      //...
    });

    // or
    dataItem.update({ $set: { property: 'some value' }}, function (err, item) {
      // ...
    });

  });

10-08 15:47