Ich habe ein Schema für Conversations in MongoDB erstellt, wo Nachrichten als Array von Objekten in Conversations Object gespeichert werden.MongoDB Subdocument Abfrage Leistung auf große Dataset
Conversation {
company_id: { type:ObjectId, index: true },
messages: [{
_id: { type: ObjectId, index: true }
}]
}
Es gibt eine Abfrage, die ich an der richtigen Stelle, die ein Gespräch auf der Grundlage der company_id und _id der ersten Nachricht in dem Array gesendet nachschlägt (das aus einem anderen Teil der Anwendung gesendet wird).
Conversation.findOne({ company_id: c_id, messages._id: firstMessage })
Theoretisch, wenn ein Unternehmen hat 100 Millionen Gespräche, und jede dieser Gespräche hat 1 Million Nachrichten, wie viel von einem Performance-Problem werde ich für die Abfrage des Subdokument haben, anstatt mir die erste Nachricht speichert ID im Hauptdokument und Abfrage nur das Stammobjekt?
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 })
Vielen Dank im Voraus für die Hilfe.
Mario, danke für die Antwort. In Wirklichkeit habe ich Nachrichten als separate Sammlung mit den IDs in der Konversation gespeichert, aber ich war mehr Fragen über die Abfrage Berechnung eines Objekts finden vs Unterobjekt suchen. – Dfranc3373