用户有项目I,但我还想存储一些额外的项目信息:
const userSchema = new Schema({
...
  projects: [{
    _id: {
      type: Schema.Types.ObjectId,
      ref: 'Project',
      unique: true, // needed?
    },
    selectedLanguage: String,
  }]
});我想用项目名来填充,所以我这样做:
const user = await User
  .findById(req.user.id, 'projects')
  .populate('projects._id', 'name')
  .exec();然而,user.projects给了我这个不想要的输出:
[
  {
    selectedLanguage: 'en',
    _id: { name: 'ProjectName', _id: 5a50ccde03c2d1f5a07e0ff3 }
  }
]我想要的是:
[
  { name: 'ProjectName', _id: 5a50ccde03c2d1f5a07e0ff3, selectedLanguage: 'en' }
]我可以转换数据,但我希望Mongoose可以实现这一点,因为这似乎是一个常见的场景?谢谢。
发布于 2018-01-07 02:39:09
这里似乎有两个选项:
1)将_id字段命名为更具语义的名称,这样它就是:
{
  selectedLanguage: 'en',
  somethingSemantic: { _id: x, name: 'ProjectName' },
}2)扁平化数据,这通常可以用现代JS来完成:
const user = await User
  .findById(req.user.id, 'projects')
  .populate('projects._id', 'name')
  .lean() // Important to use .lean() or you get mongoose props spread in
  .exec();
const projects = user.projects.map(({ _id, ...other }) => ({
  ..._id,
  ...other,
}));https://stackoverflow.com/questions/48127786
复制相似问题