【发布时间】:2013-03-13 05:17:56
【问题描述】:
您好,我有 2 条游戏记录:
game 1 有玩家列表 p1(alice), p2(bob), p3(matt >), p4(tom)
game 2 包含玩家列表 p1(alice), p2(bob), p3(jack >), p4(tom)
我想查询我的 MongoDB 收藏游戏,以对与 BOB 出现在同一游戏中的最常出现的人进行排序。在这种情况下,一个好的结果是:
Alice: appear 2 times
Tom: appear 2 time
Matt: appear 1 time
Jack: appear 1 time
在 SQL 中我做了:
SELECT idplayer, COUNT(idplayer) AS countplayer
FROM (SELECT b.idgame, b.idplayer
FROM associations a, associations b
WHERE a.idplayer="BOB"
AND b.idgame=a.idgame
AND b.idplayer <> "BOB"
ORDER BY b.idgame DESC LIMIT 1000) as c
GROUP BY idplayer
ORDER BY countplayer DESC LIMIT 5;
对于 mongo,我正在尝试类似:
gamesCollection.find("{playerid : #}","BOB").sort(//counter).limit(5)...
有人可以帮我解决这个针对 MongoDB 的查询吗? 谢谢
编辑:
我想我越来越接近我想要的,但仍然是错误的查询:
> db.games.aggregate("[{ $match: {playerid : 'bob'} }, {$group : { _id:null, cou
nt: { $sum: 1}} } ]")
请提出解决方案。谢谢
编辑 2
游戏文档示例:
{ "_id" : ObjectId("514d9afb6e058b8a806bdbc0"), "gameid" : 1, "numofplayers" : 3,
"playersList" : [{"playerid" : "matt" },{"playerid" : "bob"},{"playerid" : "alice"} ] }
【问题讨论】:
-
尝试使用聚合框架:docs.mongodb.org/manual/reference/aggregation。在那里你可以在名字上
$match,在其他用户上$group,$sort,等等。