Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Meteor如何接收MongoDB查询结果的更新?_Node.js_Mongodb_Meteor_Nosql - Fatal编程技术网

Node.js 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指的是查询,而不是文档。如果您有一个现有

几个月前我问了一个问题,“流星”似乎有答案

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

谢谢


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)直接从该缓存中提供,而不需要 与服务器对话

在客户端上写入数据库时(插入、更新、删除), 命令立即在客户端上执行,并且, 同时,它被发送到服务器并在那里执行。 livedata包对此负责

这就解释了客户端到服务器

从服务器到客户端,我可以收集到livedata和mongo livedata包


希望这能有所帮助。

目前,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'}});