nodejs node example node.js mongodb meteor nosql

node.js - node - ¿Cómo recibe Meteor actualizaciones de los resultados de una consulta de MongoDB?



node js mongodb example (3)

Actualmente, Meteor realmente funciona bien con una instancia / proceso. En tal caso, todas las consultas pasan por esta instancia y puede transmitirla a otros clientes. Además, sondea MongoDB cada 10 s para cambios en la base de datos que fueron realizados por consultas externas. Son planes para 1.0 para mejorar la escalabilidad y, con suerte, permitir que varias instancias informen a cada uno sobre los cambios.

DerbyJS por otro lado está utilizando Redis PubSub.

Hice una pregunta hace unos meses, a la que Meteor parece tener la respuesta.

¿Cuál de las bases de datos NoSQL, de haber alguna, puede proporcionar una serie de * cambios * a un conjunto de resultados de consulta?

¿Cómo recibe Meteor actualizaciones de los resultados de una consulta de MongoDB?

Gracias,

Chris


De los documentos:

  • En el servidor, se crea una colección con ese nombre en un servidor Mongo backend. Cuando llama a los métodos de esa colección en el servidor, se traducen directamente en las operaciones normales de Mongo.

  • En el cliente, se crea una instancia de Minimongo. Minimongo es esencialmente una implementación no persistente en memoria de Mongo en JavaScript puro. Sirve como un caché local que almacena solo el subconjunto de la base de datos con la que trabaja este cliente. Las consultas en el cliente (búsqueda) se sirven directamente desde este caché, sin hablar con el servidor.

Cuando escribe en la base de datos en el cliente (insertar, actualizar, eliminar), el comando se ejecuta inmediatamente en el cliente y, simultáneamente, se envía al servidor y se ejecuta allí también. El paquete livedata es responsable de esto.

Eso explica cliente a servidor.

Servidor a cliente de lo que puedo recopilar es los paquetes liveata y mongo-livedata.

https://github.com/meteor/meteor/tree/master/packages/mongo-livedata

https://github.com/meteor/meteor/tree/master/packages/livedata

Espero que ayude.


Desea query.observe() para esto. Supongamos que tiene una colección de publicaciones con un campo de etiquetas y desea recibir una notificación cuando se agregue una publicación con la etiqueta important .

http://docs.meteor.com/#observe

// collection of posts that includes array of tags var Posts = new Meteor.Collection(''posts''); // DB cursor to find all posts with ''important'' in the tags array. var cursor = Posts.find({tags: ''important''}); // watch the cursor for changes var handle = cursor.observe({ added: function (post) { ... }, // run when post is added changed: function (post) { ... } // run when post is changed removed: function (post) { ... } // run when post is removed });

Puede ejecutar este código en el cliente, si desea hacer algo en cada navegador cuando cambie una publicación. O puede ejecutar esto en el servidor, si desea enviar un correo electrónico al equipo cuando se agrega una publicación importante.

Tenga en cuenta que added y removed refiere a la consulta, no al documento. Si tiene un documento de publicación existente y ejecuta

Posts.update(my_post_id, {$addToSet: {tags: ''important''}});

esto activará la devolución de llamada ''agregada'', ya que la publicación se agrega al resultado de la consulta.