Mongoose更新:获取推送子文档的_id

时间:2015-11-19 11:09:22

标签: mongodb mongoose mongodb-query

拥有以下update 查询

var template = {name:'my_name', ...};
ApplicationModel.update({
        _id: idApplication,
        'templates.name': { '$ne': template.name }
    },
    {
        $push: { templates: template }
    }, function(err, raw) {
          if (err) {
              return callback(err);
          }
          ...
          callback();
    });

ApplicationModel内部有一个名为templates的数组,我推送template个对象, Mongoose 自动为_id分配这些对象。

有没有办法在查询的回调函数中获取此_id

1 个答案:

答案 0 :(得分:1)

在这种情况下,我们通常只是手动创建ObjectId,所以我们在保存之前就已经创建了它:

var template = {name:'my_name', ...};
var myNewId  = new mongoose.Types.ObjectId();
template._id = myNewId;

ApplicationModel.update({
    _id: idApplication,
    'templates.name': { '$ne': template.name }
    },
    {
      $push: { templates: template }
    }, function(err, raw) {
      if (err) {
        return callback(err);
      }
      // myNewId is available here...

      callback();
    });
};

无论如何,ObjectId总是由客户端中的mongoDriver创建,因此在代码中明确地执行它或让MongoDriver处理它之间几乎没有什么区别。