.NET 官方驱动MongoDB.Driver的聚合管道Aggregate用法(一)之 具体实现

工作需要,用到MongoDB,笔者也是边学边用,基于官方的驱动MongoDB.Driver的Aggregate具体用法,网上资料甚少,且部分实现记录并不详尽。也是边学边用,文中错误之处,请留言指正。

笔者在存储和基本的时间范围查询时,都可以不使用聚合管道实现而使用约束器FilterDefinitionBuilder等来实现,网上.NET基本查询的DEMO多基于此实现,资料比较多。

Aggregate实现网上比较好的一篇文章是仓储大叔写的,参考意义很大,只是没有列出Helper类的详细内容。传送门

首先上创建Aggregate的Helper类代码。

using MongoDB.Bson;
using MongoDB.Driver;

namespace MongoDB
{
    public class MongoDBAggregate
    {
        //连接字符串
        string ConnString;
        public MongoDBAggregate(string vConnString)
        {
            ConnString = vConnString;
        }


        public IMongoCollection<BsonDocument> GetCollection(string dbaseName, string collectionNmae)
        {
            var server = new MongoClient(ConnString);
            return server.GetDatabase(dbaseName).GetCollection<BsonDocument>(collectionNmae);
        }


        public IAsyncCursor<BsonDocument> GetAggregate(string dbName,string collectionName,PipelineDefinition<BsonDocument, BsonDocument> pipeline)
        {
            return GetCollection(dbName, collectionName).Aggregate(pipeline);
        }
    }
}

实例化代码如下:

 private void button2_Click(object sender, EventArgs e)
 {
            //ISODate的时间是UTC时间,所以做查询的时候需要北京时间减去8小时,转字符串,在用ISODate处理成        $match条件
            //普通查询
            const string pipelineJson1 = " {$project : {DTime : 1 ,AdvInf : 1}}";
            const string pipelineJson2 = " { $match : { AdvInf : { $eq :3 } } }";
            const string pipelineJson3 = " { $match : { DTime : { $gte :ISODate('2018-12-04T02:20:12') } } }";

            IList<IPipelineStageDefinition> stages = new List<IPipelineStageDefinition>();
            PipelineStageDefinition<BsonDocument, BsonDocument> stage1 =
                new JsonPipelineStageDefinition<BsonDocument, BsonDocument>(pipelineJson1);
            PipelineStageDefinition<BsonDocument, BsonDocument> stage2 =
                new JsonPipelineStageDefinition<BsonDocument, BsonDocument>(pipelineJson2);
            PipelineStageDefinition<BsonDocument, BsonDocument> stage3 =
                new JsonPipelineStageDefinition<BsonDocument, BsonDocument>(pipelineJson3);
         
            stages.Add(stage1);
            stages.Add(stage2);
            stages.Add(stage3);

            PipelineDefinition<BsonDocument, BsonDocument> pipeline = new PipelineStagePipelineDefinition<BsonDocument, BsonDocument>(stages);
            MongoHelper operatDb = new MongoHelper();
            MongoDBAggregate mongo = new MongoDBAggregate("mongodb://192.168.5.99:101");
            //查询结果
            var result = mongo.GetAggregate("EHQQDZ309", "201811", pipeline).ToList();
 }

上面代码,实现了一个简单的查询,等同于SQL语句“SELECT DTime,AdvInf FROM 201811 WHERE AdvInf=3 AND DTime>'2018-12-03 18:20:12'”。

注:时间条件减了8个小时,UTC和北京时间的8小时差别。

下一篇文章,会讲解聚合管道的比较复杂的用法,如数据分组统计 等。

猜你喜欢

转载自blog.csdn.net/iandbeyond/article/details/84848017
今日推荐