3
Request.findOne({_id: id}).populate("user").exec(function(err, request) {
    if (!err) {
        request.user.firstname = firstname;
        request.date = date;
        request.save(next);
    }

保存后,日期已更改,但用户的名字没有。
模型 :

  var Request = new Schema({
    user: {
        type: ObjectId,
        ref: 'User',
        required: true
    },
    date: {
        type: Date,
        default: Date.now()
    },

我仍然可以这样做

     request.user.save(function(err){
        if(!err)
            request.save(next)
     });

但是为什么第一个不起作用?

4

2 回答 2

3

request并且user是单独集合中的文档,因此它们每个都需要自己的save操作。这就是 Mongoose 的工作方式(以及一般的 MongoDB),因为没有更新操作一次影响多个集合。

于 2013-05-28T12:35:13.580 回答
3

检查populate 上 Mongoose 文档的“更新参考资料”部分。

在示例中,您将在那里看到,您仍然必须保存已创建的RequestUser文档。(在示例中,他们首先保存用户“guille”,然后在回调中保存“故事”。

在 Mongoose 中,父文档保存但.populate不执行此操作时,子文档会保存。

于 2013-05-28T12:54:05.700 回答