当我在严格的客户端集合上调用update / insert时会发生什么?

时间:2012-05-18 19:13:28

标签: meteor

如果我使用Meteor.publish将文档推送到客户端集合(如“messages-count”示例中),那么当我在客户端集合上进行inser / update / remove时会发生什么(称为“messages-count” “在文档中的示例中)? 考虑到“messages-count”集合甚至不存在于服务器上,是否有任何事情到达服务器?在这种情况下,我们如何将文档更改传播到服务器?

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

更新:

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

  

如果我使用Meteor.publish将文档推送到客户端集合   (就像在“messages-count”例子中),然后当我发生时会发生什么   inser / update / remove在该客户端集合上(称为   文档中示例中的“messages-count”?

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

以下是API文档的摘录:

  

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

下一个问题:

  

考虑到“消息计数”,是否有任何事情到达服务器   收集甚至不存在于服务器上?

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

  

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

如果您确实只有一个客户端集合(例如,使用空名称创建的集合),那么您需要将哪些内容传播到服务器?如果您希望传播更改,请使用命名集合。