2016-06-08 11 views
0

Ich muss zwei Abfragen für zwei Sammlungen an den Mongodb durchführen.Komplexität von MongoDB-Abfragen - Sortierung im Vergleich zu zwei Abfragen

Eine Datenbank ist die E-Mail-Nachricht, die andere ist die E-Mail-Vorlage.

Ich muss mehrere E-Mails mit mehreren Vorlagen senden, so dass ich über alle Mails iteriere und überprüfe, welche Vorlage ihnen zugewiesen ist, dann schaue die Vorlage nach.

ich könnte es tun wie

  1. Finden Mail-
  2. Vorlage finden für jede Mail

oder sortieren und überprüfen, ob die Vorlage geändert:

  1. Mail-Suche und Nach Vorlage sortieren (Konnte indiziert werden)
  2. Wenn die neue t emplate ist nicht die alte Vorlage, finde die Vorlage

welcher Ansatz hat weniger Komplexität? Es gibt viel mehr E-Mails als Vorlagen. (1000 E-Mails pro Stunde vs. ein paar hundert Vorlagen)

Ich habe gehört, dass eine Suchabfrage O (log (n) + m) nimmt, wobei n die Menge der Daten in der Sammlung und m die Menge ist von Einträgen, die abgerufen werden.

Antwort

0

, was ich in diesem Fall vorschlagen könnten, werden auf der Grundlage:

email { 
    _id, 
    /*all other fields*/ 
    templateId 
} 

db.emails.aggregate([{ 
      $match : { 
       "emailIsEnt" : false 
      } 
     }, { 
      $lookup : { 
       from : emailTemplates, 
       localField : templateId, 
       foreignField : _id, 
       as : "emailTemplate" 
      } 
     } 
    ]) 

diese Abfrage-Vorlagen für jede matched E-Mail erhalten, so gibt es keine Notwendigkeit, eine zusätzliche Abfrage und Datenbank-Engine zu tun, wird Ergebnisse liefern (Sobald die Vorlage von der Festplatte gelesen wird, wird sie auf der Seite im Speicher abgelegt, so dass der interne Cache gestartet wird, um dies zu unterstützen.

Verwandte Themen