运行内部联接和外部联接



我有 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 === 'offer'(。

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'
});

有人可以告诉我为什么会这样吗?

有一次我和MongoDb专家坐在一个小组中。我记得他说,要避免聚集。 您尝试执行的操作可以通过在三个集合中的每一个集合上使用 find((.toArray(( 方法来完成。 在匹配每个集合的索引字段时使用 find 方法比使用查找编写复杂的聚合更好。

最新更新