mongodb:获取文档中出现的前x个排名(计数)
我有一些包含一般地理位置信息的文档。例如,我正在尝试获得排名前x的城市mongodb:获取文档中出现的前x个排名(计数),mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有一些包含一般地理位置信息的文档。例如,我正在尝试获得排名前x的城市 { "_id" : ObjectId("593b6a7068c4281a3f7702c5"), "clientID" : "1000000000", "session_id" : "I9Ak2k1taOGHU0Z0000000000", "location" : { "country" : "United States", "city" : "Seat
{
"_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",....
}
我是来自sql的mongo新手。我希望通过聚合来实现这一点&在我得到一系列返回的文档后,不需要在代码中实现
我找到了如何按会话id对这些文档进行分组的方法,现在我只需要添加city count的实例,并按降序排序,然后显示这些城市
我的组查询:
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
}
},
],
);
谢谢你的洞察力 我只需要将另一个分组添加到城市查询中,并获得该计数。现在,我可以添加一个限制和排序来进行取整
{
$group: {
_id: "$city",
count: { $sum: 1 }
}
}
我只需要在查询中为城市添加另一个分组,并获得该计数。现在,我可以添加一个限制和排序来进行取整
{
$group: {
_id: "$city",
count: { $sum: 1 }
}
}
你试过什么?这个问题没有任何企图。如果你表现出一种尝试,那么我们可以在你不理解的部分指导你。但有很多例子值得一读。在我发布的查询的第3阶段之后,我尝试了一个{$group:{{u id:{cust_id:“$city”,count:{???}}}。但是我不知道如何从分组中算出这些总数$组:{u id:$city],计数:{$sum:1}}刚刚包装错误。谢谢你的轻推和链接,你试过什么?这个问题没有任何企图。如果你表现出一种尝试,那么我们可以在你不理解的部分指导你。但有很多例子值得一读。在我发布的查询的第3阶段之后,我尝试了一个{$group:{{u id:{cust_id:“$city”,count:{???}}}。但是我不知道如何从分组中算出这些总数$组:{u id:$city],计数:{$sum:1}}刚刚包装错误。谢谢你的轻推和链接Neil