У меня есть 3 коллекции, каждая из которых имеет различный набор информации:
- предлагает
- провайдеров
- пользовательских настроек
Предложенияи к провайдерам можно присоединиться, используя provider_id:
const aggregate = Offers.aggregate();
aggregate.lookup({
from: 'providers'
localField: 'provider_id',
foreignField: 'provider_id',
as: 'providers'
});
aggregate.unwind({
path: '$providers'
});
Между предложениями и поставщиками существует взаимно-однозначное отношение (т. е. я гарантированно найду поставщика для каждого предложения).
IТакже необходимо определить, понравилось ли пользователю какое-либо из этих предложений.
Прямо сейчас, когда я создаю второй поисковый вызов, возвращаются только те предложения, которые понравились пользователю, а не все предложения, независимо от того, понравились они пользователю или нет.Не все предложения будут иметь запись (record_id === offer_id && record_type === 'offer') в коллекции userpreferences.
aggregate.lookup({
from: 'userpreferences',
localField: 'offer_id',
foreignField: 'record_id',
as: 'userprefernces'
});
aggregate.unwind({
path: '$userprefernces',
preserveNullAndEmptyArrays: true
});
aggregate.match({
'userprefernces.user_id': params.userId,
'userprefernces.record_type': 'offer'
});
Может кто-нибудь сказать мне, почему это происходит?