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();