【发布时间】:2013-11-23 03:37:27
【问题描述】:
我正在开发一个纸牌游戏平台,其中包含大量(10,000 多张)纸牌,这些纸牌会根据真实世界的数据进行动态更新。卡片每天填充/更新一次。
我在基金会有两个基本集合(除了用户):
1) 数据 - 相同数据字段/参数具有不同数据值的所有单个项目(例如,各种汽车型号及其规格)。我每天从另一台服务器上的 json API 更新此集合一次,用于其他目的。
2) 卡片 - 带有唯一 ID 但重复的“打印”卡片是不可能的(因此我们可以拥有 10 张福特福克斯 2010 卡片)。 Cards collection 有几个最重要的字段,来自数据收集(型号、品牌、卡片的顶级性能参数)以提供有效的用户卡片浏览,以及一个“dataId”字段,将其链接到数据收集以获取详细信息。 集合“卡片”中的卡片应在服务器端插入(“发行”或“打印”)功能/方法,但响应客户端事件(例如新游戏等)。当插入/派发新卡时,它首先从 users 表中获取一个唯一的“admin-owner”,其中包含 user _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 卡片”),使用空/管理员用户admin”用户,以及更改随机卡所有权的服务器/客户端方法,使其成为客户端卡集合的一部分(“将随机卡投射给用户”)。 我会将这些方法放在哪里?如何从客户端控制台访问服务器方法(如果登录了某个管理员用户)?
4) 我需要一种巧妙的方法来处理数据收集的服务器发布/客户端订阅,该方法仅包含来自客户端卡片集合的卡片中使用的数据。 我应该使用客户端 minimongo 查询来创建一个数组,其中包含涵盖本地卡片集合所需的所有 dataIds 吗?我是 mongo 的新手,所以我不确定如何编写 SELECT DISTINCT 或 GROUP BY 之类的东西来获得它。另外,不确定这是否是处理该问题的最佳方式,还是我应该在服务器端做一些事情作为出版物?
对 1-4 有一个清晰的想法会让我继续前进,然后我想我会挖掘自己的方式(和下面:)
【问题讨论】:
标签: meteor