簡體   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