语境
我有两个实体:
@Entity({ tableName: 'students' })
export class StudentEntity {
@Property()
firstName: string;
@Property()
lastName: string;
@ManyToMany({
entity: () => TeacherEntity,
pivotTable: 'students_to_teachers',
joinColumn: 'student_id',
inverseJoinColumn: ;teacher_id'
})
teachers = new Collection<TeacherEntity>(this);
}
和 ...
@Entity({ tableName: 'teachers' })
export class TeacherEntity {
@OneToOne(() => UserEntity, {
owner: true,
fieldName: 'user_id',
})
user: UserEntity;
@ManyToMany({
entity: () => StudentEntity,
pivotTable: 'students_to_teachers',
joinColumn: 'teacher_id',
mappedBy: (s: StudentEntity) => s.teachers
})
students = new Collection<StudentEntity>(this);
}
任务
给定 auserId
的UserEntity
a TeacherEntity
,我可以通过以下方式获取与这位老师有联系的所有学生
const students = await this.studentsRepo.find(
{
teachers: {
user: {
id: userId
}
}
}
);
问题
现在我想要相反的做法。我想选出所有与这位老师没有关系的学生。出于本能,我做了类似的事情
const students = await this.studentsRepo.find(
{
teachers: {
user: {
$ne: {
id: userId
}
}
}
}
);
但它没有作用。
请指教!
您可以为此使用集合运算符:
https://mikro-orm.io/docs/query-conditions#collection
此外,您尝试的方法也是错误的,
$ne
代表运算符,您需要在最低级别应用它,因此user: { id: { $ne: 123 } }
而不是user: { $ne: { id: 123 } }
(但同样,这里根本不需要显式id
查询)。但这可能不会达到您想要的效果,您很可能需要子查询(这是集合运算符正在做的事情)。下次您不必在 2 分钟内向 GH 和 SO 询问同样的问题,我同时订阅了这两个网站。