2017-02-25 70 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