C#中MongoDB aggregate 运用

db.collection.aggregate([array]);
array可是是任何一个或多个操作符。
操作符介绍:

  • $project:包含、排除、重命名和显示字段
  • $match:查询,需要同find()一样的参数
  • $limit:限制结果数量
  • $skip:忽略结果的数量
  • $sort:按照给定的字段排序结果
  • $group:按照给定表达式组合结果
  • $unwind:分割嵌入数组到自己顶层文件

测试数据

 {_id:1,name:"a",status:1,num:1}
 {_id:2,name:"a",status:0,num:2}
 {_id:3,name:"b",status:1,num:3}
 {_id:4,name:"c",status:1,num:4}
 {_id:5,name:"d",status:1,num:5}

应用一:统计name的数量和总数

  • mongodb语法
db.collection.aggregate([
    {
        $group: {
            _id: "$name",
            count: {
                $sum: 1
            },
            total: {
                $sum: "$num"
            }
        }]);
  • C# 使用
        var group = new BsonDocument
        {
            {
                "$group", new BsonDocument{
                   {
                       "_id", "$name"
                   },
                   {
                       "count", new BsonDocument{
                           {"$sum", 1}
                       }
                   },
                   {
                       "total", new BsonDocument{
                           {"$sum", "$num"}
                       }
                   }
               }
            }
        };

        var col = MDB.RechargeDB.GetCollection<BsonDocument>("CollectionName");
        var list = col.Aggregate().Group(group).ToList();

应用二:统计status=1的name的数量

  • mongodb语法
db.collection.aggregate([
    {
        $match: {
            status: 1
        }
    },
    {
        $group: {
            _id: "$name",
            count: {
                $sum: 1
            }
        }
    }
]);
  • C# 使用
        var match = new BsonDocument
        {
            {
                "$match", new BsonDocument{
                    {
                        "status", 1              
                    }
                }
            }
        };

        var group = new BsonDocument
        {
            {
                "$group", new BsonDocument{
                   {
                       "_id", "$name"
                   },
                   {
                       "count", new BsonDocument{
                           {"$sum", 1}
                       }
                   }
               }
            }
        };

        var col = MDB.RechargeDB.GetCollection<BsonDocument>("CollectionName");
        var list = col.Aggregate().Match(match).Group(group).ToList();

应用三:统计name的数量,并且数量为小于2的

  • mongodb语法
db.collection.aggregate([
    {
        $group: {
            _id: "$name",
            count: {
                $sum: 1
            }
        },
        {
            $match: {
                count: {
                    $lt: 2
                }
            }
        }]);
  • C# 使用
        var group = new BsonDocument
        {
            {
                "$group", new BsonDocument{
                   {
                       "_id", "$name"
                   },
                   {
                       "count", new BsonDocument{
                           {"$sum", 1}
                       }
                   }
               }
            }
        };

        var match = new BsonDocument
        {
            {
                "$match", new BsonDocument{
                    {
                        "count", new BsonDocument{
                           {"$lt", 2}
                       }             
                    }
                }
            }
        };

        var col = MDB.RechargeDB.GetCollection<BsonDocument>("CollectionName");
        var list = col.Aggregate().Group(group).Match(match).ToList();

应用四:统计stauts=1的name的数量,并且数量为1的

  • mongodb语法
db.collection.aggregate([
    {
        $match: {
            status: 1
        }
    },
    {
        $group: {
            _id: "$name",
            count: {
                $sum: 1
            }
        }
    },
    {
        $match: {
            count: 1
        }
    }
]);
  • C# 使用
        var match1 = new BsonDocument
        {
            {
                "$match", new BsonDocument{
                    {
                        "status", 1              
                    }
                }
            }
        };

        var group = new BsonDocument
        {
            {
                "$group", new BsonDocument{
                   {
                       "_id", "$name"
                   },
                   {
                       "count", new BsonDocument{
                           {"$sum", 1}
                       }
                   }
               }
            }
        };

        var match2 = new BsonDocument
        {
            {
                "$match", new BsonDocument{
                    {
                        "count", 1       
                    }
                }
            }
        };

        var col = MDB.RechargeDB.GetCollection<BsonDocument>("CollectionName");
        var list = col.Aggregate().Match(match1).Group(group).Match(match2).ToList();
0%