meteor 如何匹配订阅与客户端 collection?

how meteor match subscription with client collection?

在 meteor 服务器端,这看起来不错,它将服务器端 collection 映射到发布

if (Meteor.isServer) { // This code only runs on the server 
Meteor.publish('tasks', function tasksPublication() { return Tasks.find(); }); }

客户端的以下内容也是可以理解的,它按名称将订阅映射到发布。

Meteor.subscribe('tasks');

但我无法在任何教程或文档中找到解释订阅和客户端 collection 是如何相互映射的。没有代码将任务(订阅)映射到任务(客户端 collection)。 Meteor 可能假设客户端 collection 使用与服务器端相同的名称,因为两者都包含相同的 collection 声明 (Tasks = new Mongo.collection('Tasks');)。但是,如果我想在客户端使用不同的 collection 名称怎么办?或者,如果服务器发送的信息是来自多个 collection 的字段的混合,当客户端从订阅中获取信息时,他们如何知道哪些 collection 存储该信息?

让我们分解代码:

Meteor.publish('tasks', function() { 
    return Tasks.find(); 
});

这里我们定义了一个发布名称 'tasks',它提供从函数 return Tasks.find() 接收到的数据。

同样,在订阅时,我们会参考该特定出版物 - tasks 在这种情况下,我们会获得这些数据。

现在进入将它链接到集合的部分。在 Meteor 中,当你定义一个集合时,它应该在客户端和服务器上定义。因此,当您定义像 Tasks = new Mongo.collection('tasklists'); 这样的集合时,在服务器上,Tasks 对象引用服务器将用于与 mongoDB 服务器通信的集合 tasklists。在客户端上,创建了一个名为 Tasks 的对象,以与在客户端中为 tasklists 创建的数据库 minimongo 进行交互。 Minimongo 是 MongoDB 的 JS 客户端 API。 (您可以将其视为 mongoDB 数据库的客户端副本)。

因此,在客户端,您可以将 Tasks 定义为任何东西,只要它是 mongoDB 集合 tasklists 的对象即可 - 例如 AnyName=new Mongo.collection('tasklists');

关于发布和订阅将如何知道,我们谈论的是哪个集合:发布通过称为 cursor 的东西发送,它与特定文档和集合相关'mongoDB'。只要你得到正确的集合名称(tasklists),你就可以在客户端和服务器上有不同的对象名称(Tasks)。

这是 Meteor 工作方式的一部分。它会自动同步客户端和服务器之间集合中的数据。你不需要担心它,你也无法改变它。

您的辅助方法可以从不同的服务器集合中提取数据,并将数据放入数组中 - 您可以从不同的集合中读取数据来执行此操作,并且可以被动地执行此操作,因此当源集合发生更改时,它会 运行又是你的帮手

您还可以定义仅供客户端使用的集合,这些集合不会保存到服务器。

所以你可以做你想做的事,如果你想从你的 smooshed 数据中保存一些东西,你可能会写一段代码来提取要更新的数据到一个对象中,然后保存它.