我有两个实体:
@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);
}
给定一个
userId
一个 UserEntity
的一个 TeacherEntity
,我可以通过 带领所有与这位老师有联系的学生
const students = await this.studentsRepo.find(
{
teachers: {
user: {
id: userId
}
}
}
);
现在我想要相反的。我想带所有与这位老师没有联系的学生。本能地,我做了类似的事情
const students = await this.studentsRepo.find(
{
teachers: {
user: {
$ne: {
id: userId
}
}
}
}
);
但是没有成功。
请多多指教!
您可以为此使用集合运算符:
const students = await this.studentsRepo.find({
teachers: {
$none: {
user: userId // no need to query by `user.id` explicitly
}
}
});
https://mikro-orm.io/docs/query-conditions#collection
您尝试的也是错误的,
$ne
代表运算符,您需要在最低级别上应用它,所以user: { id: { $ne: 123 } }
而不是user: { $ne: { id: 123 } }
(但同样,这里根本不需要显式的id
查询)。但这可能不会达到您想要的效果,您很可能需要子查询(这就是集合运算符正在做的事情)。
下次你不必在 2 分钟内在 GH 和 SO 上问同样的事情,我都订阅了。