运行内部和外部联接

时间:2018-10-17 16:18:11

标签: node.js mongodb join mongoose

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

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

1 个答案:

答案 0 :(得分:0)

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