mongoose填充没有ref的ObjectId的泛型数组

时间:2016-11-09 09:02:52

标签: express mongoose mongoose-schema mongoose-populate

我使用的是mongoose 4.6.6,表达4.13,护照0.3。

我有下一个mongoose Schema

var userSchema = new Schema({
  nombre: String,
  apellidos: String,
  email: String,
  pass: String,
  fecha_registro : { type: Date, default: Date.now },
  rol_list: [Schema.Types.ObjectId], // generic array of objectId
  deleted: {type: Boolean, default: false}
});

module.exports = mongoose.model('User', userSchema);

当我搜索用户并尝试填充" rol_list"数组,总是空的。 我已经看过mongo,用户已经填好了,但猫鼬把它空了。

passport.deserializeUser(function(id, done) {
  User.findById(id)
    .populate('rol_list')
    .exec(function(err, user) {
      console.log(user);
      done(err, user);
    });
});

console.log(用户)始终显示数组rol_list为空。

如果我将对ObjectId的引用分配为:

rol_list: [{ type: Schema.Types.ObjectId, ref: 'Rol1' }]

正确填充,逻辑上仅与元素" Rol1"。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

.populate(...) mongoose功能中有一个选项,可让您指定ObjectId背后的模型。

<强> @example

Conversation.find().populate('creator', null, 'User2').exec(callback);

Stack overflow post: mongoose-populate-field-without-ref-option

答案 1 :(得分:-1)

如果你只想要对象id的数组,那么不要使用populate。

像:

passport.deserializeUser(function(id, done) {
  User.findById(id)
    .exec(function(err, user) {
      console.log(user);
      done(err, user);
    });
});