Node.js Mongoose/Mongodb-我应该显式地添加objectid来填充吗?

Node.js Mongoose/Mongodb-我应该显式地添加objectid来填充吗?,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,所以我有两个模型,一个是用户,另一个是会话 最初设置为: const users = mongoose.Schema({ _id: mongoose.Schema.Types.ObjectId, username: {type: String, unique: true}, } ); module.exports = mongoose.model('User', users,); 然后我继续添加了另一个模型,叫做sessions const sessions = mongoos

所以我有两个模型,一个是
用户
,另一个是
会话

最初设置为:

const users = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    username: {type: String, unique: true},
}
);
module.exports = mongoose.model('User', users,);
然后我继续添加了另一个模型,叫做sessions

const sessions = mongoose.Schema({
    _id: {type: mongoose.Schema.Types.ObjectId, default: mongoose.Schema.Types.ObjectId, null: false},
    user_id: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
    timestamp: {type: Date},
});

module.exports = mongoose.model('Sessions', sessions);
然后我决定,我希望能够将用户的会话与用户一起拉,并添加
sessions:[{type:mongoose.Schema.Types.ObjectId,ref:'SurfSessions',default:null}]
到我的用户模型模式

我很快了解到,
users.findOne(username:admin).populate('sessions')
本身不会填满会话,因为
sessions
返回为空数组
[]


由于我在
用户中没有
会话
填充
objectid
,这是否意味着我无法填充
会话
,或者有其他方法吗?

您应该能够使用虚拟填充:

const users = new mongoose.Schema(
  {
    _id: mongoose.Schema.Types.ObjectId,
    username: { type: String, unique: true },
  },
  { toJSON: { virtuals: true }, toObject: { virtuals: true } }
);
module.exports = mongoose.model('User', users);
然后:

userSchema.virtual('sessions', {
  ref: 'Session', // model to search in
  foreignField: 'user_id', 
  localField: '_id', // checks where user_id on session === _id on user
});

在此之后,正常使用.populate('sessions')。欲了解更多信息,请查看此帖子:

请查看有类似问题的帖子谢谢,之前已经多次查看该问题,但仍然没有回答我的问题。