2013-05-28 4 views
0
Request.findOne({_id: id}).populate("user").exec(function(err, request) { 
    if (!err) { 
     request.user.firstname = firstname; 
     request.date = date; 
     request.save(next); 
    } 

После сохранения дата изменилась, но имя пользователя не было.
Модель:MongooseJS - Как сохранить документ и ссылочный документ

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) 
    }); 

Но почему же не первая работа?

ответ

2

Проверьте раздел «Обновление Refs» в Mongoose documentation on populate.

В этом примере вы увидите, что вы все равно должны сохранить как созданные вами Request, так и User документы. (В примере, они сначала сохранить пользователя «Guille», затем в обратном вызове они сохранить «историю».)

В Mongoose, SubDocs сохранить когда родительский документ сохраняет, но .populate не делает этого.

2

request и user являются документами в отдельных коллекциях, поэтому каждый из них требует свою собственную работу save. Это просто способ работы Mongoose (и MongoDB вообще), поскольку никакая операция обновления не влияет на более чем одну коллекцию за раз.

Смежные вопросы