MongooseJS - 如何保存文档和引用的文档

Ray*_*jax 5 mongoose mongodb node.js

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

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

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

我仍然可以这样做

     request.user.save(function(err){
        if(!err)
            request.save(next)
     });
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*yHK 5

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


Mat*_*tis 3

检查 Mongoose文档中关于 populate 的“更新参考”部分。

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

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