我正在做游戏;球员组成联盟并进行竞争性预测。联赛是这样的:流星/ MongoDB的 - 阵列,子文档&重叠订阅
{ leagueName: "Premier League",
players:[
{name: "Goodie", secretPrediction: "abc"},
{name: "Baddie", secretPrediction: "def"}
] }
对于每一个球员,我需要发布到客户端的所有球员的名字在联赛,但只自己的秘密预测。因此,从以上,如果礼包已登录,在微型蒙戈的文件应该是:
{ leagueName: "Premier League",
players:[
{name: "Goodie", secretPrediction: "abc"},
{name: "Baddie"}
] }
要做到这一点,我有两个刊物 - 一个让整个联赛的文档,但不包括所有秘密的预言,和一个得到当前玩家的玩家阵列中的子文档包括她的秘密预测。我的出版物有:
// Publish whole players array excluding secretPrediction
Leagues.find({"players.name": "Goodie"}, {fields: {"players.secretPrediction": 0}})
// Publish the whole Goodie item in the players array and nothing else
Leagues.find({"players.name": "Goodie"}, {fields: {players: {$elemMatch: {name: "Goodie"}}}})
的问题是,当我订阅都上述出版物,我没有得到我想要的文件 - 秘密预测被排除在外,即使与第二次公开。 (对自己的刊物像预期的那样,只有当我订阅两者。)
现在,我从this answer明白,这两个刊物应该是客户端
下到上“合并”的顶级域水平,流星照顾到文档中执行一组工会,这样订阅可以重叠 - 发布由端和客户船舶不同顶级域的客户工作方面的功能,在文档中收集将是两套领域的结合。
所以,我有两个主要问题(制作了这一步,做得很好/谢谢!):
- 是不会发生,因为我没有处理顶级域的文档工会?有没有解决的办法?
- 我要对这个完全错误的方式?有没有更好的方法来获得我想要的结果?
1.正确。 2.你可以尝试发布到只有客户端的“虚拟”集合。 – MasterAM