我已经为MongoDB中的Conversations创建了一个模式,其中Messages被存储为Conversations Object中的一个对象数组。
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亿个对话,并且每个对话都有100万条消息,那么我将对子文档的查询有多少性能问题,而不是在主要文件中存储第一个消息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 :(得分:0)
如果您的个人消息是100万,我会将它们完全保存在一个单独的集合中,并使用聚合框架的3.4版中的$ lookup来为您提供结果。当然,我会假设两个集合中都有适当的索引,并使用适当的过滤器来匹配公司。