Node.js Meteor如何接收MongoDB查询结果的更新?
几个月前我问了一个问题,“流星”似乎有答案 Meteor如何接收MongoDB查询结果的更新 谢谢Node.js Meteor如何接收MongoDB查询结果的更新?,node.js,mongodb,meteor,nosql,Node.js,Mongodb,Meteor,Nosql,几个月前我问了一个问题,“流星”似乎有答案 Meteor如何接收MongoDB查询结果的更新 谢谢 Chris。您需要query.observe()进行此操作。假设您有一个带有标记字段的Posts集合,并且希望在添加带有important标记的post时收到通知 如果希望在post更改时在每个浏览器中执行某些操作,则可以在客户端上运行此代码。或者,如果您想在添加重要帖子时向团队发送电子邮件,也可以在服务器上运行此操作 请注意,added和removed指的是查询,而不是文档。如果您有一个现有
Chris。您需要
query.observe()
进行此操作。假设您有一个带有标记字段的Posts
集合,并且希望在添加带有important
标记的post时收到通知
如果希望在post更改时在每个浏览器中执行某些操作,则可以在客户端上运行此代码。或者,如果您想在添加重要帖子时向团队发送电子邮件,也可以在服务器上运行此操作
请注意,added
和removed
指的是查询,而不是文档。如果您有一个现有的post文档并运行
Posts.update(my_post_id, {$addToSet: {tags: 'important'}});
这将触发“添加”回调,因为帖子将被添加到查询结果中。来自文档:
- 在服务器上,在后端Mongo服务器上创建具有该名称的集合。在服务器上调用该集合的方法时, 它们直接转换为正常的Mongo操作
- 在客户端上,将创建一个Minimongo实例。Minimongo本质上是Mongo在内存中的非持久性实现 纯JavaScript。它用作本地缓存,只存储 此客户端正在使用的数据库的子集。询问 客户端(find)直接从该缓存中提供,而不需要 与服务器对话
希望这能有所帮助。目前,Meteor仅在一个实例/进程中运行良好。在这种情况下,所有查询都要经过这个实例,它可以将它广播回其他客户端。另外,它每10秒轮询一次MongoDB,查看外部查询对数据库所做的更改。他们计划使用1.0来提高可伸缩性,并希望允许多个实例向每个实例通知更改
另一方面,DerbyJS正在使用Redis PubSub。这是一个非常好的答案,但不是针对这个问题。我问的是Meteor如何从MongoDB获得更改流,而不是如何从Meteor获得更改。我没有测试的一件事是,MongoDB集合中在Meteor之外进行的插入是否会传播到客户端。我浏览了代码,但是我看不到MongoDB通知Meteor集合更新的那一行。@chrisdew我刚刚直接向MongoDB插入了一条记录,它出现在浏览器中。所以我想服务器会得到通知。
Posts.update(my_post_id, {$addToSet: {tags: 'important'}});