fad*_*bee 17 mongodb nosql node.js meteor
几个月前我问过一个问题,Meteor似乎有答案.
NoSQL数据库中哪些(如果有的话)可以为查询结果集提供*更改*流?
Meteor如何接收MongoDB查询结果的更新?
谢谢,
克里斯.
deb*_*lis 19
你想要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
});
Run Code Online (Sandbox Code Playgroud)
如果您希望在帖子更改时在每个浏览器中执行某些操作,则可以在客户端上运行此代码.或者,如果您想在添加重要帖子时向团队发送电子邮件,则可以在服务器上运行此功能.
请注意,added
并removed
参考查询,而不是文档.如果您有现有的帖子文档并运行
Posts.update(my_post_id, {$addToSet: {tags: 'important'}});
Run Code Online (Sandbox Code Playgroud)
这将触发'添加'回调,因为帖子已添加到查询结果中.
小智 2
来自文档:
在服务器上,在后端 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
希望有帮助。