如何手动填充?

时间:2015-01-23 11:05:44

标签: mongoose

我有一个架构Session

Session: {
  _user: { type: mongoose.Schema.ObjectId, ref: 'User' }
}

我有一个创建会话的函数,我需要填充session._user。我的函数将用户作为第一个参数,因此我想做session._user = user;,但这不起作用。 这是一个简化的代码段:

function createSession(user, callback) {
  return Session.create({
    _user: user.id
  }, function(err, session) {
    // session._user = user; does not work
    // return callback(null, session);

    // Workaround
    return session.populate('_user', function(err, session) {
      return callback(null, session);
    });
};

2 个答案:

答案 0 :(得分:0)

如果要自行填充像session这样的Mongoose模型实例,必须首先通过调用toObject()将其转换为普通JS对象,否则模式类型检查将阻止它工作:

function createSession(user, callback) {
  return Session.create({
    _user: user.id
  }, function(err, session) {
    session = session.toObject();
    session._user = user;
    return callback(null, session);
};

答案 1 :(得分:0)

Mongoose 4.0现在提供该功能 启动该功能的问题:https://github.com/Automattic/mongoose/issues/2075以及文档问题:https://github.com/Automattic/mongoose/issues/2884