我想的概念模型games
,其中teams
的players
MongoDB中相互竞争.
我有两个系列:players
和games
.
这就是文档的games
外观.
{
"_id": { "$oid": "1" },
"teams": [
{
"players": [
{
"player": { "$oid": "2" },
"score": 500,
},
{
"player": { "$oid": "3" },
"score": 550,
}
]
},
{
"players": [
{
"player": { "$oid": "4" },
"score": 500,
},
{
"player": { "$oid": "5" },
"score": 550,
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
这是任务:给定一个玩家ID,我想找到这个玩家参与的所有游戏.
我尝试过的:
db.games.find( { "teams.players.player._id": "2" } )
Run Code Online (Sandbox Code Playgroud)
但是,这不会返回任何内容.
顺便说一下,我正在使用以下架构的Mongoose:
playerSchema = Schema
player: { type: Schema.ObjectId, ref: 'Player' }
score: { type: Number }
teamSchema = Schema
players: [ playerSchema ]
gameSchema = Schema
teams: [ teamSchema ]
Run Code Online (Sandbox Code Playgroud)
使用以下CoffeeScript查询:
Game.find 'teams.players.player._id': playerId
Run Code Online (Sandbox Code Playgroud)
不返回任何玩家ID的结果.
小智 11
在您的文件中:
"players": [
{
"player": { "$oid": "4" },
"score": 500,
},
{
"player": { "$oid": "5" },
"score": 550,
}
]
Run Code Online (Sandbox Code Playgroud)
player
嵌入式集合中的字段players
是BSON Id(即它看起来像ObjectId("4e208e070347a90001000008")
),所以我认为你应该像这样构造你的查询:
db.games.find( { "teams.players.player": ObjectId("2") } )
Run Code Online (Sandbox Code Playgroud)
注意,我放弃了_id
- 如果在mongo控制台中工作,那么我怀疑Coffee查询将是类似的(删除_id
部分).
归档时间: |
|
查看次数: |
17361 次 |
最近记录: |