mongodb:获取文档

时间:2017-06-10 05:47:53

标签: mongodb aggregation-framework

我的文档包含一般的地理位置信息。我正在尝试以前x个城市为例。

{ 
    "_id" : ObjectId("593b6a7068c4281a3f7702c5"), 
    "clientID" : "1000000000", 
    "session_id" : "I9Ak2k1taOGHU0Z0000000000", 
    "location" : {
        "country" : "United States", 
        "city" : "Seattle", 
        "postal" : "98105", 
        "traits" : null, 
        "local" : "America/Los_Angeles"
    }, 
    "dateTime" : ISODate("2017-06-09T21:12:56.819+0000"), 
    "action" : "PLAY",....
}

我是mongo的新手,来自sql。我希望使用聚合& amp;在我获得一系列文档后,我没有在代码中执行此操作。

我想出了如何通过session_id对这些文档进行分组,现在我只需要添加按降序排序的城市计数实例,然后只显示这些城市。

我的群组查询:

db.Playerstats.aggregate(

    // Pipeline
    [
        // Stage 1 for tests
        {
            $match: {
                clientID: "1000000000"
            }
        },

        // Stage 2
        {
            $group: {
                _id : "$session_id", 
                start: { $first: "$dateTime"},
                stop: { $last: "$dateTime"},
                eventID : { $addToSet: "$eventID"},
                status : { $addToSet: "$eventStatus"},
                browser: { $addToSet: "$browser.userAgent"},
                OS : { $addToSet: "$browser.platform"},
                city : { $addToSet: "location.city"},
                p2pData : { $sum: "$p2p.totalVerifiedBytes"},
                actions : { $addToSet: "$action"}
            }
        },

        // Stage 3
        {
            $sort: {
                startDate: -1
            }
        },
    ],
); 

感谢您的任何见解。

1 个答案:

答案 0 :(得分:0)

我只需要为城市的查询添加另一个分组并获得该数量。现在我可以添加限制和排序来完善它。

{
    $group: {
    _id: "$city",
     count: { $sum: 1 }             
    }
}