node.js - 保存后 Mongoose 填充

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

这是设置:

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

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

最佳答案

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

book._creator = user;

你会做这样的事情:

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

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

https://stackoverflow.com/questions/13525480/

相关文章:

mongodb - 无法验证到 mongo, "auth fails"

javascript - node.js mongodb 通过_id node-mongodb-na

java - Spring Data 的 MongoTemplate 和 MongoReposito

mongodb - $lookup 查找数组中的 ObjectId

mongodb - 无法启动/启动本地 mongo db

mongodb - 如何将 mongodb 客户端连接到本地 Meteor MongoDB

sql - mongo中的外键?

MongoDB select count(distinct x) on an indexed col

macos - mac上mongodb数据库的位置

node.js - 如何在 mongodb-native findOne() 中使用变量作为字段名?