【发布时间】:2015-02-14 12:19:11
【问题描述】:
我在从我的收藏中计算不同的 LogStatusse 时遇到问题。我想从查询中得到以下结果:
月 |进口商名称 | NrOfError | NrOfDebug | NrOfInfo | NrOfWarning
因此,这包括按月份和 ImporterName 分组,并计算具有不同状态的文档数量。
我的 MongoDB 收藏:
{
"_id" : "8ec84cb7-5099-4a9d-be00-a40200a67c5a",
"Messages" : [
{
"LogStatus" : "Error",
"Message" : "My test message"
},
{
"LogStatus" : "Error",
"Message" : "My test message"
},
{
"LogStatus" : "Error",
"Message" : "My test message"
},
{
"LogStatus" : "Error",
"Message" : "My test message"
},
{
"LogStatus" : "Error",
"Message" : "My test message"
}
],
"StartTime" : new Date("2014-12-15T10:06:09.00Z"),
"EndTime" : new Date("2014-12-15T13:06:09.00Z"),
"HasErrors" : true,
"HasWarnings" : false,
"ImporterName" : "MyImporter"
}
我已经有以下查询:
db.SessionLogItems.aggregate
([
{
$project:
{
month :{$month : "$StartTime"},
name: "$ImporterName",
status: "$Messages.LogStatus",
_id: 0
}
}
])
结果:
月:12,“名称”:“进口商名称”,状态:[“错误”,“错误”,“信息”]
和
db.SessionLogItems.aggregate
([
{
$unwind: "$Messages"
},
{
$group: { _id: "$Messages", Number : {$sum : 1 }}
},
{
$sort: {Number : -1 }
}
])
结果: “_id”:{“LogStatus”:“警告”,“消息”:“我的测试警告”},“数字”:5 "_id" : { "LogStatus" : "Error", "Message" : "我的测试消息" }, "Number" : 5
但我似乎无法找出正确的查询。任何帮助表示赞赏!
编辑:
我上面的示例只是众多文档之一。我有几个具有 startTime 和 EndTime 的进口商。进口商有几个日志消息和四个可能的日志状态:“错误”、“信息”、“调试”、“警告”。我想了解每个进口商每月和每个进口商产生了多少错误、信息、调试和警告。
【问题讨论】:
-
那你在这里问什么?所有项目都有一个“错误”的
LogStatus。您是否只希望对找到的每个不同的日志状态进行计数?在整个集合中还是仅在每个文档中?这个问题似乎缺乏这种清晰度,也没有提供不同数据或结果的明确示例。可以使用一些工作来更好地解释。 -
我的坏。我上面的示例只是众多文档之一。我有几个具有 startTime 和 EndTime 的进口商。进口商有几个日志消息和四个可能的日志状态:“错误”、“信息”、“调试”、“警告”。我想了解每个进口商每个月和每个进口商产生了多少错误、信息、调试和警告。
标签: mongodb mongodb-query aggregation-framework