如何手动填充?
How to manually populate?
我有一个架构 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);
});
};
如果您想像 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);
};
Mongoose 4.0 现已提供该功能。
启动该功能的问题:https://github.com/Automattic/mongoose/issues/2075 and the issue for the documentation: https://github.com/Automattic/mongoose/issues/2884.
我有一个架构 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);
});
};
如果您想像 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);
};
Mongoose 4.0 现已提供该功能。
启动该功能的问题:https://github.com/Automattic/mongoose/issues/2075 and the issue for the documentation: https://github.com/Automattic/mongoose/issues/2884.