我有3个馆藏,每个馆藏都有不同的信息集:
可以使用provider_id将要约和提供者加入:
const aggregate = Offers.aggregate();
aggregate.lookup({
from: 'providers'
localField: 'provider_id',
foreignField: 'provider_id',
as: 'providers'
});
aggregate.unwind({
path: '$providers'
});
要约与提供者之间存在一对一的关系(即,我保证可以为每个要约找到一个提供者)。
我还需要确定用户是否“喜欢”这些优惠中的任何一项。
现在,当我创建第二个查找调用时,仅返回用户喜欢的商品,而不是所有商品,无论用户是否喜欢。并非所有要约在“用户首选项”集合中都有记录(record_id === offer_id && record_type ===“要约”)。
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'
});
有人可以告诉我为什么会这样吗?
答案 0 :(得分:0)
我一次和MongoDb专家坐在一小组。我记得他说过,避免聚集。 您可以通过在三个集合中的每一个上使用find()。toArray()方法来完成您想做的事情。 在对每个集合的索引字段进行匹配时使用find方法要比用查找编写复杂的聚合更好。