【发布时间】:2017-08-08 02:38:33
【问题描述】:
我有一个如下所示的 mongoDB 集合:
{
"_id": 1,
"name": "John Doe",
"company": "Acme",
"email": "john.doe@acme.com",
"matches": [171844, 169729, 173168, 174310, 168752, 174972, 172959, 169546]
}
{
"_id": 2,
"name": "Bruce Wayne",
"company": "Wayne Enterprises",
"email": "bruce@wayne.com",
"matches": [171844, 232333, 233312, 123456]
}
{
"_id": 3,
"name": "Tony Stark",
"company": "Stark Industries",
"email": "tony@stark.com",
"matches": [173844, 155729, 133168, 199310, 132752, 139972]
}
{
"_id": 4,
"name": "Clark Kent",
"company": "Daily Planet",
"email": "clark.kent@planet.com",
"matches": [169729, 174310, 168752]
}
{
"_id": 5,
"name": "Lois Lane",
"company": "Daily Planet",
"email": "lois.lane@planet.com",
"matches": [172959, 169546]
}
我需要获得一个过滤后的用户列表,但使用一个键来显示用户的“排名”位置,该位置基于它拥有的“匹配”记录的数量。
应该有一个global ranking 位置和一个company ranking 位置。
期望的结果应该是这样的(例如过滤 company='Daily Planet'):
{
_id: 4,
name: 'Clark Kent',
company: 'Daily Planet',
email: 'clark.kent@planet.com',
points: 3, // <=
globalRank: 4, // <=
companyRank: 1 // <=
},
{
_id: 5,
name: 'Lois Lane',
company: 'Daily Planet',
email: 'lois.lane@planet.com',
points: 2, // <=
globalRank: 4, // <=
companyRank: 2 // <=
}
请注意,Clark Kent 在全球排名中排名第 4,因为他有 3 场比赛(John Doe、Bruce Wayne 和 Tony Stark 的比赛次数比他多),并且在公司排名中排名第 1,因为他的比赛次数比任何人都多每日星球用户。
但是,即使经过几天的研究,我也找不到方法。 (我什至不知道如何做全球排名或公司排名)。
关于如何解决此问题或如何以不同方式解决问题的任何想法?
【问题讨论】: