2017-02-25 73 views
0

我已經爲MongoDB中的對話創建了一個模式,其中消息作爲對象數組存儲在對話對象中。在大型數據集上的MongoDB子文檔查詢性能

Conversation { 
    company_id: { type:ObjectId, index: true }, 
    messages: [{ 
        _id: { type: ObjectId, index: true } 
    }] 
} 

有一個查詢我在地方,查找基於該COMPANY_ID以及陣列中發送的第一消息的一個_id會話(正被從應用程序的另一部分發送)。

Conversation.findOne({ company_id: c_id, messages._id: firstMessage }) 

從理論上講,如果一家公司有億間的對話,而且每個對話有1百級的消息,多少性能問題我將有子文檔的查詢,而不是我存儲的第一條消息在主Document中查詢id並查詢基礎對象?

Conversation { 
    company_id: { type:ObjectId, index: true }, 
    firstMessage_id: { type:ObjectId, index: true }, 
    messages: [{ 
        _id: { type: ObjectId, index: true } 
    }] 
} 

Conversation.findOne({ company_id: c_id, firstMessage_id: firstMessage }) 

在此先感謝您的幫助。

回答

0

如果您的個人消息是100萬,我會將它們放在一個單獨的集合中,並使用3.4版中的聚合框架$ lookup來給出結果。當然,我會假設兩個收藏品都有適當的指數,並且使用適當的過濾器來匹配公司。

+0

馬里奧,謝謝你的回答。實際上,我將消息作爲單獨的集合與存儲在會話中的ID進行比較,但是我更想知道對象查找與子對象查找的查詢計算。 – Dfranc3373