Meteor如何接收MongoDB查询结果的更新?

几个月前我问了一个问题,meteor似乎有答案。

NoSQL数据库中哪些(如果有的话)可以提供*更改*到查询结果集?

Meteor如何接收MongoDB查询结果的更新?

谢谢,

克里斯。

从文档:

  • 在服务器上,具有该名称的集合在后端Mongo服务器上创build。 当您在服务器上调用该集合的方法时,它们会直接转换为正常的Mongo操作。

  • 在客户端上创build一个Minimongo实例。 Minimongo本质上是纯JavaScript中的内存中非持久化的Mongo实现。 它充当本地caching,仅存储该客户端正在使用的数据库的子集。 客户端上的查询(查找)直接从caching中提供,而不与服务器通话。

当你写入客户端的数据库(插入,更新,删除)时,该命令立即在客户端执行,同时,它被发送到服务器并在那里执行。 livedata包是负责这个。

这解释了客户端到服务器

从我能收集的服务器到客户端是livedata和mongo-livedata软件包。

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

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

希望有所帮助。

你想query.observe() 。 假设您有一个带有标签字段的Posts集合,并且您希望在添加具有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 }); 

你可以在客户端运行这个代码,如果你想在每个浏览器中做一些事情,当一个职位的变化。 或者你也可以在服务器上运行这个function,如果你想说当添加一个重要的post的时候发送邮件给团队。

请注意, addedremoved是指查询,而不是文档。 如果你有一个现有的文章文件并运行

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

这将触发“添加”callback,因为post被添加到查询结果。

目前,Meteor在一个实例/进程中运行得很好。 在这种情况下,所有的查询都会经过这个实例,并且可以将其广播回其他客户端。 另外,它每10秒轮询MongoDB数据库的更改,这些更改是由外部查询完成的。 他们计划为1.0提高可伸缩性,并希望允许多个实例通知每个变化。

另一方面,DerbyJS使用Redis PubSub。