猫鼬填充没有引用的 ObjectId 的通用数组

Posted

技术标签:

【中文标题】猫鼬填充没有引用的 ObjectId 的通用数组【英文标题】:mongoose populate generic array of ObjectId without ref 【发布时间】:2017-03-23 00:50:43 【问题描述】:

我正在使用猫鼬 4.6.6,快递 4.13,护照 0.3。

我有下一个猫鼬模式

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 中查看了用户已填满,但 mongoose 将其返回为空。

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

console.log(user) 总是显示数组 rol_list 为空。

如果我分配对 ObjectId 的引用,例如:

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

than 是正确填充的,逻辑上只有元素“Rol1”。

有什么想法吗?

【问题讨论】:

rol_list 后面的架构名称是什么? 不,后面没有架构。我想要一个通用的对象数组。 【参考方案1】:

.populate(...) mongoose 函数中有一个选项,允许您指定 ObjectId 后面的模型。

@example

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

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

【讨论】:

【参考方案2】:

如果您想要仅包含对象 ID 的数组,则不要使用填充它。

喜欢:

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

【讨论】:

以上是关于猫鼬填充没有引用的 ObjectId 的通用数组的主要内容,如果未能解决你的问题,请参考以下文章

只有当字段包含 ObjectId 时,是不是可以让猫鼬填充混合字段?

了解填充猫鼬

一个 ObjectId 的 ObjectId 的 Mongoose 查询数组

无法在 node.js 中用猫鼬填充数组

在猫鼬中填充数据无法正常工作?

Graphql 结果不使用猫鼬填充关联类型的结果