sql >> Databasteknik >  >> NoSQL >> MongoDB

Kan Meteor korrekt hantera data som uppdateras externt direkt till MongoDB-databasen?

Meteor är konfigurerad att ansluta till en extern mongodatabas . Du har mongo paketerat på en lokal utvecklingsapp men det är bara för komfort och enkel integration.

I produktionen måste du alltid ansluta Meteor till din pågående Mongo-instans med MONGO_URL miljövariabel .

Bonus:du kan ställa in MONGO_URL även i dev-läge för att ansluta till en specifik db i dev-läge. Var medveten om att du kan CRUD allt på denna db, använd med försiktighet.

Under huven använder Meteor nodmongodrivaren. Du kan i princip använda alla API:er för denna drivrutin (se det här inlägget för detaljer om hur man ringer infödda Mongo-metoder)

Med Meteors publicering/prenumerationssystem du styr i princip vilken data som publiceras till kunden. Publikationer körs varje gång data ändras (liknande observatörsmönster).

Om alla dina kunder prenumererar på data från en samling kommer de att få uppdateringarna när samlingen uppdateras. Och nu kommer du till din mest eftertraktade funktion:detta fungerar också om denna data uppdateras av någon extern källa.

Det fungerar också med mycket snabba uppdateringsintervaller. Jag arbetade på ett nyligen projekt där enorma mängder data har uppdaterats via python på en Mongo-DB-samling. Meteor-appen lyssnade på den och visade data för klienterna i "realtid" (eller vad användarna uppfattar som realtid).

Det finns dock några fallgropar och det är bra att känna till dem i förväg.

  1. Meteor skapar dokument med ett _id av typen sträng och inte Mongo.ObjectID . Men den kan läsa den och skriva den om du använder den på rätt sätt .

  2. Meteor omsluter samlingar med ett egen API som integrerar samlingen bäst med dess fibers baserad miljö. Om du behöver använda funktioner utöver läs här och här .

  3. Returnerade markörer beter sig något annorlunda men som med samlingar finns det också alla inbyggda funktioner tillgängliga om du får markören från en rawCollection

  4. Dubbelkolla vilka datatyper du använder i dina samlingar. Håll dig till exempel med samma datumtyper (som ISODate) så att det inte finns några oavsiktliga fel efter en uppdatering. Det finns också en Meteor-motsvarighet till mongoose heter simpl-schema (npm-paket ) vilket är ett bra sätt att hålla struktur på dina samlingar.

Sammanfattningsvis, om du överväger det mesta av Meteor-guiden och API-dokumenten bör du vara på god väg eftersom integrationen av externt uppdaterade samlingar vanligtvis fungerar mycket bra och det handlar mest om att förstå puben/undersystemet för att få det att fungera.

Redigera:

Ja det gör det men du måste vara medveten om en annan fråga. Om det (externt skapade) dokumentet har följande värde:

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

Sedan måste du ändra din (Meteor) fråga från

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

till

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

Samma mönster fungerar för att skapa dokument. Istället för

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

du skickar ett nyskapat ObjectID:

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

Om du skapar dokument i Meteor med metoden ovan ska du inte behöva oroa dig för _id vara en sträng.

Förutom att dokument är som de ska vara (se dataformatbryggan ). Men om det finns ett undantag som du hittat som inte har nämnts här, kommentera gärna eftersom detta kan vara viktigt för andra användare också.




  1. MongoDB:undantag i initAndListen:20 Försökte skapa en låsfil på en skrivskyddad katalog:/data/db, avslutande

  2. Mongodb :arrayelementprojektion med findOneAndUpdate fungerar inte?

  3. 'session' är odefinierad när du använder express / redis för session store

  4. MongoDB Replica Set Medlemsstat är ANDRA