我想弄清楚我网站上最活跃的用户。
我有
形式的记录{
"_id" : "db1855b0-f2f4-44eb-9dbb-81e27780c796",
"createdAt" : 1360497266621,
"profile" : { "name" : "test" },
"services" : { "resume":
{ "loginTokens" : [{
"token" : "82c01cb8-796a-4765-9366-d07c98c64f4d",
"when" : 1360497266624
},
{
"token" : "0e4bc0a4-e139-4804-8527-c416fb20f6b1",
"when" : 1360497474037
} ]
},
"twitter" : {
"accessToken" : "9314Sj9kKvSyosxTWPY5r57851C2ScZBCe",
"accessTokenSecret" : "UiDcJfOfjH7g9UiBEOBs",
"id" : 2933049,
"screenName" : "testname"
}
}
}
我希望能够按loginTokens
的数量选择用户和订购。
在MySQL
中,它将类似于:
SELECT id, COUNT(logins) AS logins
FROM users
GROUP BY id ORDER BY logins DESC
我在querymongo.com上尝试了这个,我收到了一个错误(无法通过非列名称使用别名/ cant顺序)
Mongo的做法是什么?
谢谢!
答案 0 :(得分:0)
我刚转换:
SELECT id, COUNT(logins)
FROM users
GROUP BY id
要:
db.users.group({
"key": {
"id": true
},
"initial": {
"countlogins": 0
},
"reduce": function(obj, prev) {
prev.countlogins++;
}
});
希望这有帮助
答案 1 :(得分:0)
以下是您使用聚合框架所说内容的示例:
db.users.aggregate([
{$unwind: '$services.resume.loginTokens'},
{$group: {_id: '$_id', logins: {$sum: 1}}},
{$sort: {logins: -1}}
])
这应该可以解决问题。