我有这个项目结构(C#):
event2 = new EventItem
{
type = "Warning",
date = DateTime.Now.AddHours(i * (-1.5)),//in a seed loop
serverGroupId = "507f1f77bcf86cd799439012",
serverLocalId = "507f1f77bcf86cd799429015",
system = "Authentication server",
message = "User has logged in from another IP.",
messageAttributes = new AttributeItem[] { new AttributeItem { param = "userId", value = "789efe77bcf86cd799439013" },
new AttributeItem { param = "component", value = "server" }},
warningLevel = 4
};
我想找到日志所涉及的最频繁的组件,该组件在过去24小时内发生,并且类型为警告或错误。到目前为止,我已经编写了查询,在24小时内为我提供了类型错误或警告的所有日志,但是我遇到了组件频率最高的部分出现问题:
var results = collection.Find(Query.And
(
Query.Or
(
Query.EQ("type", "Warning"),
Query.EQ("type", "Error")
),
Query.GT("date", DateTime.Now.AddDays(-1)),
Query.LT("date", DateTime.Now)
)
);
我需要添加什么才能获得最常用的组件(可能还包括过去24小时内该组件的日志数量)?
答案 0 :(得分:1)
您需要使用mongodb map / reduce或group / reduce查询系列,或者更好的是聚合框架。
在C#中查看此页面中的示例: http://dotnet.dzone.com/articles/mongodb-aggregation-framework