Mongoose .populate() 不填充

Posted

技术标签:

【中文标题】Mongoose .populate() 不填充【英文标题】:Mongoose .populate() does not populate 【发布时间】:2019-07-22 14:34:47 【问题描述】:

我有两个架构 RoleUser。当我执行Role.find() 时,我想用具有该特定角色的用户填充users

let roleSchema = new Schema(
  name: 
    type: String,
    required: true,
  ,
  ...,
  users: [
    type: mongoose.Schema.ObjectId,
    ref: 'User'
  ]
, 
  timestamps: true,
);

const Role = mongoose.model('Role', roleSchema);
let userSchema = new Schema(
  username: 
    type: String,
    required: true,
  ,
  ...,
  role: 
    type: mongoose.Schema.ObjectId,
    ref: 'Role'
  ,
, 
    timestamps: true,
  
);

const User = mongoose.model('User', userSchema);

当我使用以下代码获得Role 时:

Role.findById(req.params.roleId)
  .populate('users')
  .then(role => 
    res.send(role);
  ).catch(err => 
    res.send(err)
);

它返回以下内容:

  
   "users": [  

   ],
   "_id":"5c78006df35ca926534ad865",
   "name":"Role",
   "createdAt":"2019-02-28T15:38:21.741Z",
   "updatedAt":"2019-02-28T15:38:21.741Z",
   "__v":0

User.find().populate('role') 工作正常,但 Role.find().populate('users') 不行。

我做错了什么还是在这种情况下不需要.populate()

【问题讨论】:

【参考方案1】:

没关系。我想我必须一直使用aggregate().lookup()...因为Role.users 中没有任何ID...

Role.aggregate()
  .lookup(
    from: 'users',
    localField: '_id',
    foreignField: 'role',
    as: 'users'
  ).then( role => 
    res.send(role);
  );

这给了我想要的回应。

【讨论】:

以上是关于Mongoose .populate() 不填充的主要内容,如果未能解决你的问题,请参考以下文章

mongoose.populate() 未显示填充内容

Mongoose:嵌套级别的多个填充

MongoDB和Mongoose:无法使用.populate()填充用户的帖子

Mongoose .populate 未在 JSON 中显示

猫鼬'populate()'没有填充

Mongoose .populate 随机