我在做一场游戏,球员们组成联盟,进行竞争预测。联盟看起来是这样的:
{ leagueName: "Premier League",
players:[
{name: "Goodie", secretPrediction: "abc"},
{name: "Baddie", secretPrediction: "def"}
] }对于每个球员,我需要向客户公布联盟中所有球员的名字,但是只是他们自己的秘密预测。因此,从上面看,如果Goodie登录,关于微型mongo的文档应该是:
{ 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"}}}})问题是,当我订阅和的上述出版物时,我没有得到我想要的文档--即使是第二次发布,秘密预测也被排除在外。(就他们自己而言,这些出版物的表现与预期一样,只有在我同时订阅这两种出版物时才能做到。)
现在,我从这个答案了解到,这两个出版物应该在客户机上“合并”。
在顶级字段()级别,Meteor注意在文档之间执行一组合并,这样订阅就可以重叠--将不同的顶级字段并行发布到客户端,在客户端上,集合中的文档将是这两组字段的合并。
因此,我有两个主要问题(做得好/谢谢你这么远!):
发布于 2016-11-30 14:14:33
您是否可以重新安排数据文档,以便可以使用单个查询?
{ leagueName: "Premier League",
players:[
{name: "Goodie"},
{name: "Baddie"}
]
playerPredictions:[
{name: "Goodie", secretPrediction: "abc"},
{name: "Baddie", secretPrediction: "def"}
]
}这样,就可以在一个查询中返回给定人员的所有参与者,并且只返回playerPrediction。
发布于 2016-11-30 14:33:25
所以在你的情况下,我会:
联盟收藏:
[{
_id: 'league1',
name: 'League 1',
// ...
}]玩家收藏:
[{
_id: 'player1',
name: 'Player 1',
// ...
}]League2Player收藏:
[{
_id: 'league1palyer1',
playerId: 'player1',
leagueId: 'league1',
secretPrediction: 'abc',
// ...
}]https://stackoverflow.com/questions/40889117
复制相似问题