MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Може ли Meteor правилно да обработва данни, актуализирани външно директно към базата данни MongoDB?

Meteor е конфигуриран да свързва се с външна база данни на mongo . Имате mongo, пакетиран в локално приложение за разработка, но това е само за удобство и лесна интеграция.

В производствената среда винаги ще трябва да свързвате Meteor с вашия работещ екземпляр на Mongo, като използвате MONGO_URL променлива на средата .

Бонус:можете да зададете MONGO_URL дори в режим dev, за да се свържете с конкретна db в режим dev. Имайте предвид, че можете да CRUD всичко в тази база данни, използвайте внимателно.

Под капака Meteor използва драйвера на node mongo. По принцип можете да използвате целия API на този драйвер (вижте тази публикация за подробности как да извикате собствени методи на Mongo)

С системата за публикуване/абонамент на Meteor вие основно контролирате какви данни се публикуват на клиента. Публикациите се изпълняват всеки път, когато данните се променят (подобно на модела на наблюдателя).

Ако всички ваши клиенти се абонират за данните от колекция, те ще получат актуализациите, след като колекцията се актуализира. И сега стигаме до вашата най-желана функция:това също работи, ако тези данни се актуализират от външен източник.

Освен това работи с много бързи интервали на актуализиране. Работих по скорошен проект, при който огромни количества данни бяха актуализирани чрез python в колекция Mongo-DB. Приложението Meteor го слушаше и показваше данните на клиентите в „реално време“ (или това, което потребителите възприемат като реално време).

Има обаче някои клопки и е добре да ги знаете предварително.

  1. Meteor създава документи с _id от тип низ, а не Mongo.ObjectID . Въпреки това може да го прочете и напише ако го използвате правилно .

  2. Meteor обвива колекции със собствен API който интегрира най-добре колекцията със своите fibers базирана среда. Ако трябва да използвате функционалност отвъд, моля, прочетете тук и тук .

  3. Върнати курсори се държат малко по-различно, но както при колекциите, има и всички собствени функционалности, ако получите курсора от rawCollection

  4. Проверете отново типовете данни, които използвате във вашите колекции. Например придържайте се към същите типове дати (като ISODate), така че да няма нежелани грешки след актуализация. Има и двойник на Метеор на mongoose с име simpl-schema (npm пакет ), което е добър начин да запазите структурата на вашите колекции.

Обобщено, ако вземете предвид повечето от ръководството за Meteor и документите за API, трябва да сте на добър път, тъй като интегрирането на външно актуализирани колекции обикновено протича много добре и става дума най-вече за разбиране на pub/sub системата, за да може да работи.

Редактиране:

Да, така е, но трябва да сте наясно с друго запитване. Ако (външно създаден) документ има следната стойност:

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

След това трябва да промените вашата (Метеор) заявка от

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

към

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

Същият модел работи за създаване на документи. Вместо

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

предавате новосъздадено ObjectID:

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

Ако създавате документи в Meteor с метода по-горе, не трябва да се притеснявате за _id като низ.

Освен това документите са такива, каквито трябва да бъдат (вижте мост за формат на данни ). Въпреки това, ако сте открили изключение, което не е споменато тук, не се колебайте да коментирате, тъй като това може да е важно и за други потребители.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose (модул node.js) причинява високо натоварване на процесора

  2. Не искам да започваш mongod с `sudo mongod`

  3. Как да се свържете с вашите MongoDB внедрявания, използвайки Robo 3T GUI

  4. Разбиране на MongoDB индекси

  5. попълни в mongodb с meteor