Давайте определим, например, эти сущности:
@Entity()
export class Author {
@OneToMany(() => Book, book => book.author)
books = new Collection<Book>(this);
}
@Entity()
export class Book {
@Property()
name: string;
@ManyToOne()
author: Author;
}
const authors = await authorRepository.find({ books: {name: 'Test'} }, {
limit: 10
});
Как вы можете видеть, я хочу выбрать всех авторов, у которых есть книги с именем «Test», но это сгенерирует следующий запрос:
select `e0`.* from `author` as `e0`
left join `book` as `e1` on `e0`.`id` = `e1`.`author_id`
where `e1`.`name` = 'Test' limit 10
Проблема в том, что когда у меня более 2 авторов и у каждой из них более 10 книг с именем «Тест», этот запрос вернет только первого автора из-за предложения limit.
Я не уверен, является ли это ошибкой в ORM или ожидаемым поведением.
Один из способов исправить это - выбрать все строки без предложения limit и выполнить разбиение на страницы в памяти, как они есть. делать в спящем режиме, но я не уверен, сколько памяти будет использоваться с очень большими таблицами, и это может заблокировать событие l oop в NodeJS при их обработке.