几个月前我问了一个问题,Meteor 似乎有答案。
哪些 NoSQL 数据库(如果有)可以为查询结果集提供 *changes* 流?
Meteor 如何接收对 MongoDB 查询结果的更新?
谢谢,
克里斯。
几个月前我问了一个问题,Meteor 似乎有答案。
哪些 NoSQL 数据库(如果有)可以为查询结果集提供 *changes* 流?
Meteor 如何接收对 MongoDB 查询结果的更新?
谢谢,
克里斯。
你想要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
});
如果您想在帖子更改时在每个浏览器中执行某些操作,您可以在客户端上运行此代码。或者,如果您想说在添加重要帖子时向团队发送电子邮件,您可以在服务器上运行它。
请注意added
并removed
参考查询,而不是文档。如果您有一个现有的过帐文档并运行
Posts.update(my_post_id, {$addToSet: {tags: 'important'}});
这将触发“添加”回调,因为帖子被添加到查询结果中。
目前,Meteor 确实适用于一个实例/进程。在这种情况下,所有查询都通过此实例,它可以将其广播回其他客户端。此外,它每 10 秒轮询一次 MongoDB,以查找由外部查询完成的数据库更改。它们是 1.0 的计划,以提高可扩展性,并希望允许多个实例通知每个实例有关更改。
另一方面,DerbyJS 正在使用 Redis PubSub。
从文档:
在服务器上,在后端 Mongo 服务器上创建具有该名称的集合。当您在服务器上调用该集合上的方法时,它们会直接转换为正常的 Mongo 操作。
在客户端上,创建了一个 Minimongo 实例。Minimongo 本质上是纯 JavaScript 中 Mongo 的内存中非持久实现。它用作本地缓存,仅存储此客户端正在使用的数据库的子集。客户端上的查询(查找)直接从此缓存中提供服务,无需与服务器对话。
当您在客户端上写入数据库(插入、更新、删除)时,该命令会立即在客户端上执行,同时它会被传送到服务器并在那里执行。livedata 包对此负责。
这解释了客户端到服务器
从我可以收集到的服务器到客户端是 livedata 和 mongo-livedata 包。
https://github.com/meteor/meteor/tree/master/packages/mongo-livedata
https://github.com/meteor/meteor/tree/master/packages/livedata
希望有帮助。