3

如果我使用 Meteor.publish 将文档推送到客户端集合(如“消息计数”示例中),那么当我在该客户端集合上插入/更新/删除时会发生什么(在文档中的示例)?考虑到服务器上甚至不存在“消息计数”集合,是否有任何东西到达服务器?在这种情况下,我们如何将文档更改传播到服务器?

注意:我已经看到@debergalis 的出色回答,他在其中详细解释了这个例子(这里:https ://stackoverflow.com/a/10566873/694222 ),这很有意义。但它没有涉及调用客户端集合(在他的示例中为“计数”)以插入/更新文档时会发生什么。

更新:

所以我自己尝试了一下,结果是这样的:如果我有一个名为 Counts 的客户端集合(使用 Meteor.publish 填充),那么 Counts.find 工作正常,但 Counts.insert 根本不起作用,说没有找到相关的 Meteor.method,这很好。

但现在我有一个新问题。如果我订阅的客户端集合与发布的服务器端集合具有相同的名称(我已经删除了自动发布流星包),那么执行插入客户端确实会传播到服务器端并将文档添加到服务器端 mongo。这显然是不能接受的。。

因此,基本上,具有相同名称的客户端集合(您传递给新 Meteor.Collection 的内容)可以成功更新具有相同名称的服务器端集合,即使关闭自动发布包也是如此。这是一个错误吗?

4

2 回答 2

0

messages-count不是集合,它是包含单个属性的单个记录的记录集。

您将房间 ID 传递给它,它会返回它的计数;你不能用那个记录集做更多的事情......

于 2012-05-19T10:29:31.413 回答
0

如果我使用 Meteor.publish 将文档推送到客户端集合(如“消息计数”示例中),那么当我在该客户端集合上插入/更新/删除时会发生什么(在文档中的示例)?

API 文档中的“消息计数”示例使用“命名”集合。集合名称是“messages-count”。所有命名集合都存在于服务器端。当您插入/更新/删除客户端时,更改会自动传播到服务器集合。

以下是 API 文档的摘录:

如果您在创建集合时传递了一个名称,那么您就是在声明一个持久集合——一个存储在服务器上并可供所有用户查看的集合。客户端代码和服务器代码都可以使用相同的 API 访问相同的集合。

下一个问题:

考虑到服务器上甚至不存在“消息计数”集合,是否有任何东西到达服务器?

该集合确实存在于服务器上(见上文),因此是的,客户端集合上的所有插入/更新/删除都将传播到服务器。

在这种情况下,我们如何将文档更改传播到服务器?

如果您确实有一个仅限客户端的集合(例如,使用空名称创建的集合),那么您必须将什么传播到服务器?如果您希望传播更改,请使用命名集合。

于 2012-05-23T01:35:26.483 回答