【发布时间】:2014-12-17 03:12:09
【问题描述】:
我怎么能不关心p1 或p2?
我从不在乎玩家是 player1 还是 player2,就其本身而言。 我只关心他们在一场比赛中交手过。
我有这种格式的文件,它代表锦标赛中的一场比赛:
{u'_id': ObjectId('5490690b2e8738094b2f8753'),
u'date': u'2014-08-02',
u'game': 7,
u'players': {u'p1': {u'char': u'marth',
u'name': u'jack',
u'stocks': {u'stock1': {u'dmg': 133, u'time': 89},
u'stock2': {u'dmg': False,
u'time': False},
u'stock3': {u'dmg': False,
u'time': False},
u'stock4': {u'dmg': False,
u'time': False}}},
u'p2': {u'char': u'fox',
u'name': u'ben',
u'stocks': {u'stock1': {u'dmg': 45, u'time': 15},
u'stock2': {u'dmg': 77, u'time': 35},
u'stock3': {u'dmg': 102, u'time': 78},
u'stock4': {u'dmg': 80, u'time': 120}}}},
u'stage': u'bf',
u'tournament': u'King of Kings 2014'}
我想找到所有涉及name'ben'的玩家的游戏;他是p1 还是p2 无关紧要。
我只知道我可以这样做:
db.games.aggregate([{'$project' : {'players.p1.name': 1}},
{'$group': {'_id' : '$players.p1.name', 'count': {'$sum': 1}}}])
输出:
{u'ok': 1.0,
u'result': [{u'_id': u'ben', u'count': 4},
{u'_id': u'man', u'count': 21},
{u'_id': u'hammy', u'count': 5},
{u'_id': u'left', u'count': 9},
{u'_id': u'armed', u'count': 12},
{u'_id': u'icicle', u'count': 11},
{u'_id': u'2king', u'count': 45},
{u'_id': u'strangelove', u'count': 9},
{u'_id': u'jack', u'count': 16}]}
但它只给了我p1。正如我之前所说,我实际上并不关心他们的玩家编号。
您能否建议我是否应该更改我的数据结构(模式?),以便我可以轻松高效地执行这些类型的查找。
我尝试将玩家放入 players 数组(没有 p1/p2 键,但这似乎使其他查询更难)。
所以我不确定在这种情况下最好的策略是什么......
【问题讨论】:
-
你解决了吗?