两个集合之间的mongodb复杂查询

时间:2018-06-28 21:26:47

标签: javascript node.js mongodb mongoose

node和mongo的新手。我是具有关系数据库背景的开发人员。

已要求我编写一份报告,以计算从与车辆维修车间预订相关的线索到发票的转换率。转化是指在潜在客户生成后的60天内生成发票的情况。

因此,我已经使用mongodb,mongoose和nodejs进行了管理,以将平面文件中的所有数据导入两个集合(线索和发票)中。我在5年内有1百万个潜在客户和约3,000万张发票,费率将按月产生。所有数据都具有通用的车辆规则。

所以我的问题是如何将数据与猫鼬和nodejs一起加入?

到目前为止,我已经尝试过寻找任何潜在客户,因此请在60天内找到任何发票,以使潜在客户有资格获得转化。这行得通,但是我的脚本在大约20次成功更新后停止了。在这一点上,我认为我的脚本(对每个销售线索的发票进行单个查询)对mongodb来说负担太重了,我发现对mongodb进行数百万个单独的查询实在太多了。

经过数小时的浏览,我不确定应该找什么!?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的尝试应该没有问题。但是,对大数据Mongo数据库实例和对它们的分析对我有什么帮助:直接在Mongo中运行查询,而不是通过Node运行。这样,您就不必将Mongo结构(例如迭代器)转换为Node结构(例如数组),并且通常会损失很多开销。

此外,请确保您具有正确的索引设置。在大型数据库的性能方面,这可能是巨大的差异。

然后我将要做的事情是这样的(应该将其视为伪代码):

let converted = 0;
db.leads.find({},{id: 1, date: 1}).forEach(lead => {
    const hasInvoices = db.invoices.count({leadId: lead.id, date: {$lt: lead.date + 60}});
    converted ++;

});

为了加快处理速度,在这种情况下,我将使用以下索引:

db.invoices.createIndex({leadId: 1, date: -1});