sql >> Databáze >  >> NoSQL >> MongoDB

Dokáže Meteor správně zpracovat data aktualizovaná externě přímo do databáze MongoDB?

Meteor je nakonfigurován pro připojení k externí mongo databázi . Máte mongo zabalené v aplikaci pro místní vývoj, ale to je jen pro pohodlí a snadnou integraci.

Ve výrobě budete muset Meteor vždy propojit se spuštěnou instancí Mongo pomocí MONGO_URL proměnná prostředí .

Bonus:můžete nastavit MONGO_URL i v režimu dev pro připojení ke konkrétní db v režimu dev. Uvědomte si, že na této db můžete CRUD všechno, používejte opatrně.

Meteor pod kapotou používá ovladač node mongo. V zásadě můžete používat všechna rozhraní API tohoto ovladače (viz tento příspěvek podrobnosti o tom, jak volat nativní metody Mongo)

S systémem publikací/předplatného společnosti Meteor v podstatě řídíte, jaká data jsou klientovi publikována. Publikace jsou spuštěny pokaždé, když se data změní (podobně jako u pozorovatele).

Pokud se všichni vaši klienti přihlásí k odběru dat kolekce, dostanou aktualizace, jakmile se kolekce aktualizuje. A nyní se dostáváme k vaší nejžádanější funkci:funguje to také, pokud jsou tato data aktualizována nějakým externím zdrojem.

Pracuje také s velmi rychlými intervaly aktualizací. Pracoval jsem na nedávném projektu, kde bylo pomocí pythonu aktualizováno obrovské množství dat na kolekci Mongo-DB. Aplikace Meteor to poslouchala a zobrazovala data klientům v „reálném čase“ (neboli to, co uživatelé vnímají jako reálný čas).

Existují však určitá úskalí a je dobré je znát předem.

  1. Meteor vytváří dokumenty s _id typu string a ne Mongo.ObjectID . Je však schopen jej přečíst a zapsat pokud jej používáte správně .

  2. Meteor obaluje sbírky pomocí vlastního rozhraní API která nejlépe integruje kolekci s jejími fibers založené prostředí. Pokud potřebujete použít další funkce, přečtěte si zde a zde .

  3. Vrácené kurzory chovají se mírně odlišně, ale stejně jako u kolekcí jsou i zde dostupné všechny nativní funkce, pokud přijmete kurzor z rawCollection

  4. Zkontrolujte datové typy, které používáte ve svých kolekcích. Držte se například stejných typů data (jako ISODate), aby po aktualizaci nedocházelo k žádným nezamýšleným chybám. Existuje také protějšek Meteor k mongoose s názvem simpl-schema (balíček npm ), což je dobrý způsob, jak udržet strukturu ve vašich sbírkách.

Stručně řečeno, pokud vezmete v úvahu většinu průvodce Meteor a dokumenty API, měli byste být na dobré cestě, protože integrace externě aktualizovaných sbírek obvykle běží velmi dobře a je to hlavně o pochopení systému pub/sub, aby fungoval.

Upravit:

Ano, ale musíte si být vědomi jiného dotazu. Pokud má (externě vytvořený) dokument následující hodnotu:

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

Poté musíte změnit svůj dotaz (Meteor) z

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

do

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

Stejný vzorec funguje pro vytváření dokumentů. Místo

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

předáte nově vytvořené ObjectID:

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

Pokud vytváříte dokumenty v Meteoru výše uvedenou metodou, neměli byste si dělat starosti s _id být řetězcem.

Kromě toho jsou dokumenty takové, jaké by měly být (viz most datových formátů ). Pokud však najdete výjimku, která zde nebyla zmíněna, neváhejte se vyjádřit, protože to může být důležité i pro ostatní uživatele.




  1. Ruční zadávání argumentů do dotazu MongoDB pro podporu funkce řazení (pro index nerozlišující malá a velká písmena)

  2. MongoDB $toUpper

  3. Tipy pro správu konfigurací databáze

  4. Změnit datum řetězce na datum ISO v MongoDB?