繁体   English   中英

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

[英]mongodb complex query between two collections

对node和mongo来说还很新。 我是来自关系数据库背景的开发人员。

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

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

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

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

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

任何帮助将不胜感激。

您的尝试应该没有问题。 但是,对大数据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});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM