【发布时间】:2015-10-20 03:17:04
【问题描述】:
我有以下示例数据的分析集合。
{ "_id" : ObjectId("55f996a4e4b0cc9c0a392594"), "action" : "apiUploadFile", "assetId" : "55f996a4e4b0cc9c0a392593" },
{ "_id" : ObjectId("5603d384e4b0cf75af10be88"), "action" : "agAsset", "assetId" : "55f996a4e4b0cc9c0a392593"},
{ "_id" : ObjectId("5603d395e4b0cf75af10becc"), "action" : "aAD", "assetId" : "55f996a4e4b0cc9c0a392593" },
{ "_id" : ObjectId("5603d395e4b0cf75af10becd"), "action" : "mobCmd", "assetId" : "55f996a4e4b0cc9c0a392593", sessionId : "123"},
{ "_id" : ObjectId("5603d395e4b0cf75af10bece"), "action" : "mobCmd", "assetId" : "55f996a4e4b0cc9c0a392593", sessionId : "1234" },
{ "_id" : ObjectId("5603d395e4b0cf75af10becf"), "action" : "mobCmd", "assetId" : "55f996a4e4b0cc9c0a392593", sessionId : "1234" }
我需要按“assetId”查找分析组的总和,然后为每个“操作”类型查找。我想出了以下查询
db.analytics.aggregate(
[
{
$match : {
'assetId' : { "$ne": null }
}
},
{$group :{
_id:
{
assId:'$assetId'
},
viewCount:{
$sum:{
$cond: [ { $eq: [ '$action', 'agAsset' ] }, 1, 0 ]
}
},
sessionCount:{
$sum:{
$cond: [ { $eq: [ '$action', 'mobCmd' ] }, 1, 0 ]
}
}
}
}]
)
这很好用,除了我无法使用不同的“sessionId”找到“sessionCount”。例如这里是当前输出
{ "_id" : { "assId" : "55f996a4e4b0cc9c0a392593" }, "viewCount" : 1, "sessionCount" : 3 }
预期的输出是
{ "_id" : { "assId" : "55f996a4e4b0cc9c0a392593" }, "viewCount" : 1, "sessionCount" : 2 }
我需要找到 action='mobCmd' 的 sessionCount 并具有 sessionId 的 distinct 值。如何在“sessionCount”部分的 $sum 操作中使用 distinct?
【问题讨论】:
-
你想在这里做什么?目前还不清楚你在问什么。您当前的查询输出是什么?预期的结果是什么?
-
@user3100115 我刚刚用当前和预期的输出更新了帖子。谢谢你的检查。信息不足请评论
标签: mongodb mongodb-query aggregation-framework