我在#coupon:hover {
border:1px solid #aaa;
-webkit-box-shadow: 3px 4px 8px -4px rgba(0,0,0,0.75);
-moz-box-shadow: 3px 4px 8px -4px rgba(0,0,0,0.75);
box-shadow: 3px 4px 8px -4px rgba(0,0,0,0.75);
transition:100ms;
cursor:pointer;
-webkit-transform: scale(1.02,1.02);
-moz-transform: scale(1.02,1.02);
transition: 250ms;
}
集合中有documents
。每个文档都负责保存运行游戏所需的数据。这是我的文档结构
games
基本上这是我的纸牌游戏(call-bridge)的结构。现在我想要的出版物是播放器将在他的浏览器中使用{
_id: 'xxx',
players: [
user:{} // Meteor.users object
hand:[] //array
scores:[]
calls:[]
],
table:[],
status: 'some string'
}
数据(minimongo)以及其他播放器hand
字段。因此,下载到浏览器的订阅将是这样的。
user, scores, calls
{
_id: 'xxx',
players: [
{
user:{} // Meteor.users object
hand:[] //array
scores:[]
calls:[]
},
{
user:{} // Meteor.users object
scores:[]
calls:[]
},
// 2 more player's data, similar to 2nd player's data
],
table:[],
status: 'some string'
}
对象具有players.user
属性,用于区分用户。在meteor发布方法中,我们可以访问_id
,它返回请求数据的userId。这意味着我想要this.userId
与{匹配的用户的嵌套hand
数组{1}}。我希望这些解释可以帮助您编写更准确的解决方案。
答案 0 :(得分:1)
你需要做的是"规范化"你的收藏。不是在游戏集合中的玩家字段中进行手,分数,调用,而是可以创建一个单独的集合来保存该数据,并使用用户_id作为"密钥"然后只引用player字段中的用户_id。例如。
创建GameStats集合(或您想要的任何名称)
{
_id: '2wiowew',
userId: 1,
hand:[],
scores:[],
calls:[],
}
然后在游戏集合中
{
_id: 'xxx',
players: [userId],
table:[],
status: 'some string'
}
因此,如果您想获取当前用户请求数据的内容
GameStats.find({userId: this.userId}).hand
修改强>
他们确实鼓励在某些情况下进行非规范化,但在上面发布的代码中,数组不起作用。以下是mongoDB文档中的示例。
{
_id: ObjectId("5099803df3f4948bd2f98391"),
name: { first: "Alan", last: "Turing" },
birth: new Date('Jun 23, 1912'),
death: new Date('Jun 07, 1954'),
contribs: [ "Turing machine", "Turing test", "Turingery" ],
views : NumberLong(1250000)
}
答案 1 :(得分:0)
要从数组元素中获取特定属性,您可以编写一些内容,如下面的行db.games.aggregate([{$ unwind:“$ players”},{$ project:{“players.scores”:1 }}]);这只给我们id和得分字段