我正在开发一个纸牌游戏平台,其中包含大量(10,000 多张)纸牌,这些纸牌会根据真实世界的数据动态更新。卡片每天填充/更新一次。
我在基金会有两个基本收藏(除了用户):
1) 数据 - 相同数据字段/参数具有不同数据值的所有单个项目(例如,各种车型及其规格)。我每天从另一个服务器上的 json API 更新这个集合一次,用于另一个目的。
2) 卡片 - 具有唯一 ID 但重复的“打印”卡片是不可能的(因此我们可以拥有 10 张福特福克斯 2010 卡片)。Cards collection 有几个最重要的字段,来自数据收集(型号、品牌、卡片的顶级性能参数)以提供高效的用户卡片浏览,以及一个“dataId”字段,将其链接到数据收集以获取详细信息。集合“卡片”中的卡片应在服务器端插入(“发行”或“打印”)功能/方法,但响应客户端事件(例如新游戏等)。当插入/派发新卡时,它首先从用户表中获取一个唯一的“管理员所有者”,其中用户 _id 为一对一关系,稍后更新以创建所有权。
因此,在客户端,卡片集合就像一个用户“套牌”(所有者是用户的所有卡片)。如果我是正确的,它应该在服务器端写成:
Meteor.publish('cards', function() {
return Cards.find({"userID":this.userId});
});
这一切都很清楚,到目前为止,Meteor 非常棒,因为它为我节省了几个月的工作!
但是,我不确定:
1)我想要一个客户端数据收集出版物来涵盖客户详细的卡片视图(通过将卡片与数据链接)。它当然应该只包含来自数据收集的所有数据项,以及客户卡集合(“套牌”)中每张卡的详细信息。我认为它是这样的:
Meteor.publish('data', function (dataIds *array with all unique data item ids in client card collection *) {
return Data.find("dataID":{$in:dataIds);
});
2)我需要一个服务器/客户端方法,通过从“管理员”用户的客户端控制台执行 Meteor.call 方法,使用空/管理员用户从数据项(“创建 10 张新闻福特福克斯 2010 卡”)添加/插入新卡,以及用于更改随机卡所有权的服务器/客户端方法,使其成为客户端卡集合的一部分(“将随机卡投射给用户”)。我会将这些方法放在哪里?如何从客户端控制台访问服务器方法(如果登录了某个管理员用户)?
4) 我需要一种巧妙的方法来处理数据收集的服务器发布/客户端订阅,该数据收集将仅包含来自客户端卡片集合的卡片中使用的数据。我应该使用客户端 minimongo 查询来创建一个数组,其中包含涵盖本地卡片集合所需的所有 dataIds 吗?我是 mongo 的新手,所以我不确定如何编写 SELECT DISTINCT 或 GROUP BY 之类的东西来获得它。另外,不确定这是否是处理该问题的最佳方法,还是我应该在服务器端做一些事情作为出版物?
对 1-4 有一个清晰的想法会让我继续前进,然后我想我会挖掘自己的方式(并在 :)