保存后猫鼬填充

新手上路,请多包涵

我无法手动或自动在新保存的对象上填充创建者字段……我能找到的唯一方法是重新查询我已经拥有的我不想做的对象。

这是设置:

 var userSchema = new mongoose.Schema({
  name: String,
});
var User = db.model('User', userSchema);

var bookSchema = new mongoose.Schema({
  _creator: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
  description: String,
});
var Book = db.model('Book', bookSchema);

这是我拉头发的地方

var user = new User();
user.save(function(err) {
    var book = new Book({
        _creator: user,
    });
    book.save(function(err){
        console.log(book._creator); // is just an object id
        book._creator = user; // still only attaches the object id due to Mongoose magic
        console.log(book._creator); // Again: is just an object id
        // I really want book._creator to be a user without having to go back to the db ... any suggestions?
    });
});

编辑:最新的猫鼬修复了这个问题并添加了填充功能,请参阅新接受的答案。

原文由 Pykler 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 636
2 个回答

您应该能够使用模型的填充函数来执行此操作:http: //mongoosejs.com/docs/api.html#model_Model.populate 在书的保存处理程序中,而不是:

 book._creator = user;

你会做类似的事情:

 Book.populate(book, {path:"_creator"}, function(err, book) { ... });

帮助你的答案可能为时已晚,但我最近被困在这个问题上,它可能对其他人有用。

原文由 user1417684 发布,翻译遵循 CC BY-SA 3.0 许可协议

我的解决方案是使用 execPopulate ,就像这样

const t = new MyModel(value)
return t.save().then(t => t.populate('my-path').execPopulate())

原文由 François Romain 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题