mongodb 如何将$和用于相同的子模式

wtlkbnrh  于 2023-03-01  发布在  Go
关注(0)|答案(1)|浏览(118)

我正在与节点、 Mongoose 和MongoDB合作。
我有一个用户,它可以与俱乐部有多个关联。我需要返回与“俱乐部A”有有效关联的所有用户
所以,我有:

@Schema()
export class User {
  _id: string;

@Prop({
    type: [ClubAssociationSchema],
  })
  associations: ClubAssociation[] = [];
}

关联模式为:

@Schema()
export class ClubAssociation {
  _id: string;

  @Prop({
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Club',
    required: true,
  })
  club: Club;

  @Prop({ required: true, default: false })
  valid: boolean;

  @Prop({ required: true })
  number: string;
}

为了返回俱乐部A中具有有效关联的所有项目,我会:

const items = await this.model
      .find(
         {
              $and: ['associations.club': xxxxx, 'associations.valid': true],
})

这将返回与以下有效项具有ANY关联的所有用户:true,并且与俱乐部A的关联,即使它有效:因此,它正在检查与俱乐部A具有关联并且具有有效的:真关联,但是否有效无关紧要:true是针对俱乐部A或针对任何其它俱乐部。

aurhwmvo

aurhwmvo1#

可以使用$elemMatch运算符来匹配包含数组元素的文档,该数组元素与同一嵌套字段上的多个条件相匹配。
F.e:

const items = await this.model.find({
  associations: {
    $elemMatch: {
      club: xxxxx,
      valid: true,
    },
  },
});

此查询将匹配至少有一个关联同时满足这两个条件的用户

相关问题