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的时候发送邮件给团队。
请注意, added
和removed
是指查询,而不是文档。 如果你有一个现有的文章文件并运行
Posts.update(my_post_id, {$addToSet: {tags: 'important'}});
这将触发“添加”callback,因为post被添加到查询结果。
目前,Meteor在一个实例/进程中运行得很好。 在这种情况下,所有的查询都会经过这个实例,并且可以将其广播回其他客户端。 另外,它每10秒轮询MongoDB数据库的更改,这些更改是由外部查询完成的。 他们计划为1.0提高可伸缩性,并希望允许多个实例通知每个变化。
另一方面,DerbyJS使用Redis PubSub。