Mongoose Populate() 用对象替换数组

Posted

技术标签:

【中文标题】Mongoose Populate() 用对象替换数组【英文标题】:Mongoose Populate() replaces array with object 【发布时间】:2021-11-24 06:07:30 【问题描述】:

我的架构是这样的

Schema()
export class User 
  @Prop( required: true )
  name: string;

  @Prop( required: true )
  email: string;

  @Prop( type: mongoose.Types.ObjectId, ref: 'Course' )
  courses: Course[];

@Schema()
export class Course 
  @Prop()
  name: string;

  @Prop([ type: mongoose.Schema.Types.ObjectId, ref: 'User' ])
  participants: User[];

  @Prop([ type: mongoose.Schema.Types.ObjectId, ref: 'Lesson' ])
  lessons: Lesson[];

我想要实现的是获得特定用户注册的一系列课程。我尝试这样做的方式是这样的。

async findUserCoursesByUserEmail(email) 
    const user = await this.userModel
      .findOne( email )
      .populate('courses')
      .exec();

    return user.courses;
  

但作为回应,我得到了一个像这样的对象,但它应该是一个数组。


    "lessons": [],
    "participants": [
        "6157a5ba06afba420464fb65"
    ],
    "_id": "6157a5ac06afba420464fb61",
    "name": "Matematyka Rozszrzona",
    "__v": 1

用户对象如下所示。


        "_id": "6157a5ba06afba420464fb65",
        "name": "Jacob",
        "email": "test@test.pl",
        "courses": [
            "6157a5ac06afba420464fb61",
            "6158d64891be3f50f85bef0a"
        ],
        "__v": 2
    

任何帮助都将不胜感激,因为我在这个问题上卡了很长时间。

【问题讨论】:

【参考方案1】:

根据nestjs/mongodb docs 更改:

@Prop( type: mongoose.Types.ObjectId, ref: 'Course' )
  courses: Course[];

在您的 UserSchema 上:

@Prop( type: [mongoose.Types.ObjectId, ref: 'Course'] )
  courses: Course[];

【讨论】:

以上是关于Mongoose Populate() 用对象替换数组的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Mongoose 访问 populate()'d 对象的属性?

mongoose#populate 在数组内的嵌套对象中返回 null

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

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

Mongoose .populate 随机

Mongoose .populate() 不填充