协助一些MongoDB查询

时间:2013-12-20 20:32:26

标签: c# mongodb aggregation-framework

我有这个项目结构(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小时内该组件的日志数量)?

1 个答案:

答案 0 :(得分:1)

您需要使用mongodb map / reduce或group / reduce查询系列,或者更好的是聚合框架。

在C#中查看此页面中的示例: http://dotnet.dzone.com/articles/mongodb-aggregation-framework