我正在尝试解决这个小问题,我试图搜索一轮寻求帮助,但我无法在任何地方找到帮助,所以我试图在这里问。
我尝试从访客日志中获取最顶级的视图产品,我的mongodb中的数据看起来像这样
{
"_id" : ObjectId("56617f12cc8eaaa6010041ab"),
"Product" : {
"UUID" : "c7b3e23e-0bf9-4fd5-b8d3-f559b80c42ed"
},
"Log" : {
"Method" : "visit",
"IP" : "127.0.0.1",
"Added" : "2015-12-04 12:54:58"
}
}
我想要的是在Product.UUID字段上创建一个组,并且所有日志都不早于1.5个月,我现在所做的就是这样。
db.getCollection('log-product').aggregate([
{
"$group" : {
_id:"$Product.UUID",
total: {$sum : 1}
}
},
{"$sort" : {total: -1}},
{"$limit" : 8}
])
这里我对Product.UUID进行分组,并根据总数计算DESC并将其限制为8,我的问题是我无法找到计算单个产品有多少访问者的方法。
希望有人可以帮我解决这个问题。
答案 0 :(得分:3)
您需要先按时间间隔过滤“Log.Added”,然后将结果传递给$ group:
db.getCollection('log-product').aggregate([
{
"$match": {
"Log.Added": { $gt: new Date(2015,10, 15), $lt: new Date(2015,11,15) }
}
},
{
"$group" : {
_id:"$Product.UUID",
total: {$sum : 1}
}
},
{"$sort" : {total: -1}},
{"$limit" : 8}
])
答案 1 :(得分:0)
您可以按Log.Added进行过滤,并按产品uuid和$ Log.IP进行过滤:
var currentDate = new Date();
var dateOffset = (24*60*60*1000) * 45;
var initInterval = new Date(new Date() - dateOffset);
db.getCollection('log-product').aggregate([
{ "$match" : { "Log.Added": {$lte: currentDate, $gte: initInterval}}},
{
"$group" : {
_id:{"product": "$Product.UUID", "visitor":"$Log.IP"},
total: {$sum : 1}
}
},
{"$sort" : {total: -1}},
{"$limit" : 8}
])