使用Aggregate<>在IMongoCollection中的函数以及它与MongoCollection中的.Aggregate()的不同形式

时间:2016-07-20 17:03:21

标签: c# mongodb aggregation-framework

我对Mongo世界很陌生。我试图使用管道方法在c#中执行聚合函数。 使用的MongoDB版本: 3.2 。 C#驱动程序版本:mongoC#和mongoDB驱动程序的2.2.4

C#这是代码

MongoClient client = new MongoClient("mongodb://localhost:27017");

IMongoDatabase database = client.GetDatabase("Interaction");

IMongoCollection<CollectionStructure.Interactions> collection = database.GetCollection <CollectionStructure.Interactions>("Interactions");
//IMongoCollection<CollectionStructure.Interactions> result;

var unwind = new BsonDocument
{
    {
        "$unwind",
        new BsonDocument
        {
            {"path", "$Pages" }
        }
    }
};

var group1 = new BsonDocument
{
    {
        "$group",
        new BsonDocument
        {
            {
                "_id", new BsonDocument
                {
                    {"UrlPath", "$Pages.Url.Path"},
                    {"InteractionId", "$_id"}
                }
            },
            {
                "count", new BsonDocument
                {
                    {"$sum", 1}
                }
            }
        }
    }

};
var group2 = new BsonDocument
{
    {
        "$group",
        new BsonDocument
        {
            {
                "_id", new BsonDocument
                {
                    {"UrlPath", "$_id.UrlPath"}
                }
            },
            {
                "distinctCount", new BsonDocument
                {
                    {"$sum", 1}
                }
            }
        }
    }

};

var sort = new BsonDocument
{
    {
        "$sort",
        new BsonDocument
        {
            {"distinctCount", "-1" }
        }
    }
};

AggregateArgs pipeline = new AggregateArgs(); //= new[] {unwind,group1,group2,sort};
pipeline.Pipeline = new[] { unwind, group1, group2, sort };


##error##
var result = collection.Aggregate<>(pipeline);

交互类只是getter和setter类,代码如下:

public static class CollectionStructure
{
        [BsonIgnoreExtraElements]
        public class Interactions
        {
            public string id { get; set; }
            public string contactId{ get; set; }
            public string channelId { get; set; }
            public string language { get; set; }
            public string siteName { get; set; }
            public int value { get; set; }
            public int visitPageCount { get; set; }
            public List<Pages> Pages{get; set;}
        }

        public class Pages
        {
            public string url {get; set;}
            public int visitPageIndex {get; set;}                
        }
}

所以有2个简单的问题:

  1. 如何在上面的场景中使用聚合函数。如果我做错了,请指导我。

  2. 这两个单独的集合MongoCollection和IMongoCollections是什么以及什么时候使用什么。

  3. 请帮帮我。提前致谢

1 个答案:

答案 0 :(得分:0)

你确定那里应该<>吗?我找不到任何指导它的文件。

同样<T>通常是为类引用“模板”,请参阅List<MyCustomClass>,我从未见过它在使用前为空