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

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)

如果您希望在帖子更改时在每个浏览器中执行某些操作,则可以在客户端上运行此代码.或者,如果您想在添加重要帖子时向团队发送电子邮件,则可以在服务器上运行此功能.

请注意,addedremoved参考查询,而不是文档.如果您有现有的帖子文档并运行

Posts.update(my_post_id, {$addToSet: {tags: 'important'}});
Run Code Online (Sandbox Code Playgroud)

这将触发'添加'回调,因为帖子已添加到查询结果中.

  • 这是一个非常好的答案,但不是这个问题.我问的是Meteor如何从MongoDB获取更改流,而不是如何从Meteor获取更改. (7认同)

小智 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

希望有帮助。

  • @chrisdew 我刚刚将一条记录直接插入到 MongoDB 中,它出现在浏览器中。所以我猜服务器会收到通知。 (3认同)