Rozszerzenie interfejsu Query tak, aby ułatwić optymalizację zapytań. Lookupy dostają swoje ID, nie ma możliwości wybrania pola "as". Matche odnoszą się do lookupów po ich id.
Interfejs wygląda następująco:
const query = new Query("books"); const author_lookup_id = query.lookup({ from: "authors", localField: "body.author", foreignField: "sealious_id", }); query.match({ lookups: { [author_lookup_id]: { "body.name": "Mickiewicz" } }, });
- Klasa wie, które $matche polegają na których $lookupach śledząc ich id.
- Każde id lookupa jest generowane na podstawie jego zawartości, z pominięciem pola as. Można odtworzyć wszystkie szczegóły lookupa na podstawie jego id.
- Klasa rozbija złożone $match-e na prostsze, aby stworzyć nowe okazje do optymalizacji zapytania:
query.match({ "body.year": 1834, lookups: { [author_lookup_id]: { "body.name": "Mickiewicz" } }, });
staje się w wewnętrznej reprezentacji czymś tożsamym z:
[ { $match: { "body.year": 1834 } }, { $match: { lookups: { [author_lookup_id]: { "body.name": "Mickiewicz" } } }, }, ];