2016-06-23 9 views
0

Also ich versuche, eine Ansicht wie SQL in Mongo dB zu erstellen. Da mir bewusst ist, dass dies nicht direkt erreicht werden kann, habe ich eine Aggregatfunktion geschaffen. Diese komplexe Aggregatfunktion führt genau das aus, was ich tun muss, und lädt den Wert in eine neue Sammlung.Update Collections in Mongo DB automatisch

db.User.aggregate([ 
    {$limit:5} 
    {$lookup: { 
    from: "Interactions", 
    localField: "_id", 
    foreignField: "userId", 
    as: "InteractionsView"} 
     }, 
    {$project: { 

     "userCount": "$User.Count", 
     . 
     . 
     . 
     . //(All fields i need are added here) 

    "InteractionsView.Pages" : { 
    $filter: { 
     input: "$InteractionsView.Pages", 
     as: "num", 
     cond: { $gte: [ "$$num.Datetime", new Date("2015-06-14T20:15:31Z")] } 
    } 
    } 
}}, 
{$out:"ReportView"} 

]) 

    db.ReportView.find({}); 

Das ist gut und die Abfrage funktioniert .. Nun, ich versuche ich diese Sammlung häufig zu aktualisieren, da ich nicht Ansichten verwenden, so dass ich als Ansicht dienen kann. Gibt es eine Option wie einen Scheduler, den ich konfigurieren kann, um alle 10 Minuten zu laufen oder gibt es neue Out-of-Box-Optionen zur Verfügung? oder mache ich es völlig falsch?

Antwort

0

Obwohl es keine integrierte Unterstützung für die Planung von Aufgaben in Mongodb gibt. Siehe job scheduling in mongodb?

Sie können jedoch Betriebssystem-Ebene Unterstützung (für Cronjobs in Linux), um Ihre Aufgabe zu planen.

0

IMHO das ist eine schlechte Idee überhaupt relationales Denken zu Dokument speichern zu projizieren.

Wenn die von Ihnen zur Verfügung gestellte Abfrage auf 5 Dokumente beschränkt ist und die Ausführungszeit akzeptabel ist, wird empfohlen, den Cache-Server wie Redis zu verwenden, um Ergebnisse in einer Schlüsselwertform mit einer TTL von 5 Minuten zu speichern oder einfach einen Cache zu erstellen Objekt auf dem Server.

In der einfachsten Form könnten Sie die gleiche Abfrage pro Anfrage ausführen und Cache-Mechanismus von der Datenbank-Engine zur Verfügung stellen.

In der Leistung zu denken, neue Sammlung zu erstellen, ist immer diskusintensiv, die Wiederverwendung von Speicherergebnissen wird schneller und reibungsloser ablaufen.

Aby Kommentare willkommen!