2013-02-18 34 views
0

我想弄清楚我网站上最活跃的用户。将此SQL表示为Mongo查询

我有形式

{ 
    "_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我得到了一个错误

(不能与非列名的别名/着秩序工作) Mongo的做法是什么?

谢谢!

回答

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++; 
    } 
}); 

希望这有助于

0

这里是你说使用聚合框架什么的例子:

db.users.aggregate([ 
    {$unwind: '$services.resume.loginTokens'}, 
    {$group: {_id: '$_id', logins: {$sum: 1}}}, 
    {$sort: {logins: -1}} 
]) 

这应该是d诀窍。