MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Kann Meteor Daten korrekt verarbeiten, die extern direkt in der MongoDB-Datenbank aktualisiert wurden?

Meteor ist so konfiguriert, dass es sich mit einer externen Mongo-Datenbank verbindet . Sie haben Mongo in eine lokale Entwicklungs-App gepackt, aber das dient nur dem Komfort und der einfachen Integration.

In der Produktion müssen Sie Meteor immer mit der MONGO_URL mit Ihrer laufenden Mongo-Instanz verbinden Umgebungsvariable .

Bonus:Sie können die MONGO_URL festlegen sogar im dev-Modus, um eine Verbindung zu einer bestimmten db im dev-Modus herzustellen. Seien Sie sich bewusst, dass Sie alles auf dieser Datenbank CRUD können, verwenden Sie es mit Vorsicht.

Unter der Haube verwendet Meteor den Node-Mongo-Treiber. Sie können grundsätzlich alle APIs dieses Treibers verwenden (siehe diesen Beitrag für Details zum Aufrufen nativer Mongo-Methoden)

Mit Meteors Veröffentlichungs-/Abonnementsystem Sie kontrollieren grundsätzlich, welche Daten an den Client veröffentlicht werden. Veröffentlichungen laufen jedes Mal, wenn sich die Daten ändern (ähnlich dem Beobachtermuster).

Wenn alle Ihre Kunden die Daten einer Sammlung abonnieren, erhalten sie die Updates, sobald die Sammlung aktualisiert wird. Und jetzt kommen wir zu Ihrer meistgesuchten Funktion:Dies funktioniert auch, wenn diese Daten von einer externen Quelle aktualisiert werden.

Es funktioniert auch mit sehr kurzen Update-Intervallen. Ich habe kürzlich an einem Projekt gearbeitet, bei dem riesige Datenmengen über Python in einer Mongo-DB-Sammlung aktualisiert wurden. Die Meteor-App hat darauf gehört und die Daten den Clients in "Echtzeit" angezeigt (oder was Benutzer als Echtzeit wahrnehmen).

Es gibt jedoch einige Fallstricke und es ist gut, sie im Voraus zu kennen.

  1. Meteor erstellt Dokumente mit einer _id vom Typ string und nicht Mongo.ObjectID . Es ist jedoch in der Lage, es zu lesen und zu schreiben wenn Sie es richtig verwenden .

  2. Meteor verpackt Sammlungen mit einer eigenen API die die Sammlung am besten mit ihren fibers integriert basierte Umgebung. Wenn Sie darüber hinausgehende Funktionen nutzen möchten, lesen Sie bitte hier und hier .

  3. Zurückgegebene Cursor verhalten sich etwas anders, aber wie bei Sammlungen stehen auch hier alle nativen Funktionalitäten zur Verfügung, wenn Sie den Cursor aus einer rawCollection erhalten

  4. Überprüfen Sie die Datentypen, die Sie für Ihre Sammlungen verwenden. Bleiben Sie zum Beispiel bei den gleichen Datumstypen (wie ISODate), damit es nach einer Aktualisierung keine unbeabsichtigten Fehler gibt. Es gibt auch ein Meteor-Gegenstück zu mongoose mit dem Namen simpl-schema (npm-Paket ), was eine gute Möglichkeit ist, Ihre Sammlungen zu strukturieren.

Zusammengefasst, wenn Sie die meisten Meteor-Leitfäden und API-Dokumente berücksichtigen, sollten Sie auf einem guten Weg sein, da die Integration extern aktualisierter Sammlungen normalerweise sehr gut läuft und es hauptsächlich darum geht, das Pub/Sub-System zu verstehen, um es zum Laufen zu bringen. P>

Bearbeiten:

Ja, aber Sie müssen sich einer anderen Abfrage bewusst sein. Wenn das (extern erstellte) Dokument den folgenden Wert hat:

{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c") }

Dann müssen Sie Ihre (Meteor-)Abfrage von

ändern
collection.findOne("4ecc05e55dd98a436ddcc47c") // returns undefined

zu

collection.findOne({ "_id" : new Mongo.ObjectID("4ecc05e55dd98a436ddcc47c") }) // returns { _id: ObjectID { _str: '4ecc05e55dd98a436ddcc47c' } }

Dasselbe Muster funktioniert beim Erstellen von Dokumenten. Statt

collection.insert({ foo:'bar' })

Sie übergeben eine neu erstellte ObjectID:

collection.insert({ foo:'bar', _id: new Mongo.ObjectID() })

Wenn Sie mit der obigen Methode Dokumente in Meteor erstellen, brauchen Sie sich um _id keine Gedanken zu machen ein String sein.

Abgesehen davon sind die Dokumente so, wie sie sein sollten (siehe Datenformatbrücke ). ). Wenn Sie jedoch eine Ausnahme gefunden haben, die hier nicht erwähnt wurde, können Sie dies gerne kommentieren, da dies auch für andere Benutzer wichtig sein kann.