首页 文章

Meteor中的链接集合

提问于
浏览
2

我正在开发一个卡片游戏平台,其中有很多(10,000张)卡片使用真实数据进行动态更新 . 卡片每天填充/更新一次 .

我在基金会有两个基本的集合(除了用户):

1)数据 - 具有相同数据字段/参数的不同数据值的所有单个项目(例如,具有其规格的各种车型) . 我每天从另一台服务器上的json API更新此集合以用于其他目的 .

2)卡片 - 具有唯一ID但“重复”的“打印”卡片当然不可能(因此我们可以拥有10张福特福克斯2010卡片) . 卡片收集包括数据收集(卡片的型号,品牌,顶级性能参数)中的几个最重要的字段,以提供有效的用户卡浏览,以及“dataId”字段,其将其链接到数据收集以获取详细信息 . 收集“卡片”中的卡片应该在服务器端插入(“发布”或“打印”)功能/方法,但是响应客户端事件(例如新游戏等) . 插入/分派新卡时,它首先获得一个唯一的“admin-owner”,其中包含来自users表的用户_id,以获得一对一的关系,稍后会更新该关系以创建所有权 .

因此,在客户端,卡片收集就像用户“套牌”(所有者都是用户的卡片) . 如果我是正确的,它应该在服务器端写为:

Meteor.publish('cards', function() {
  return Cards.find({"userID":this.userId});
});

这一切都很清楚,到目前为止Meteor非常棒,因为它节省了我数月的工作量!

但是,我不确定:

1)我希望有一个客户端数据收集出版物,以涵盖客户详细的卡片视图(通过将卡与数据链接) . 它当然应该只包含来自数据收集的所有数据项,其中包含客户卡集合中每张卡的详细信息(“deck”) . 我认为它像:

Meteor.publish('data', function (dataIds *array with all unique data item ids in client card collection *) {
  return Data.find("dataID":{$in:dataIds);
});

2)我需要一个服务器/客户端方法,通过从“admin”用户的客户端控制台执行Meteor.call方法,从空/管理用户添加/插入数据项中的新卡(“创建10个新闻Ford Focus 2010卡”)和服务器/客户端方法来更改随机卡的所有权,使其成为客户卡集合的一部分(“将随机卡转发给用户”) . 我会在哪里放置这些方法?如何从客户端控制台访问服务器方法(如果记录了某个管理员用户)?

4)我需要一种聪明的方法来处理数据收集的服务器发布/客户端订阅,该数据收集只包含来自客户卡集合的卡中使用的数据 . 我应该使用客户端minorongo查询来创建一个包含所有dataIds的数组来覆盖本地卡集合吗?我是mongo的新手,所以我不确定如何编写像SELECT DISTINCT或GROUP BY这样的东西 . 另外,不确定这是否是处理该问题的最佳方式,还是应该将服务器端作为出版物?

在1-4上有一个明确的想法会让我去,然后我想我会挖掘我的方式(和下:)

1 回答

  • 2

    1) 您编写的发布功能非常有意义 . 当然,有's a bit confusion in the term 2667478 : publications are on the server side, while on the client side you'已经订阅 . 此外,虽然你没有在 cards 集合中获得 dataID 字段,但是在 data 集合中与 _id 连接,所以你的发现应该说 {_id: {$in: dataIds}} .

    2) Read this carefully,这就是你所需要的一切 . 请记住在服务器端方法中检查用户权限 . 安全的经验法则是您永远不要相信客户 .

    3) 没有第3点?

    4) 我不确定这里的问题与1有什么不同 . 但是,您应该熟悉this method,您可以在订阅中使用它来确保数组中的 _ids 是唯一的 .

相关问题