我使用下面的聚合流水线获得结果分组,但我想在布尔值的总和中添加一个过滤器,我使用了下面的代码,需要纠正的是 IsResponseRecieved
代码中的一行。
var group = new BsonDocument
{
{
"$group",
new BsonDocument
{
{ "_id", new BsonDocument{ { "Class", "$Class" } } },
{ "TotaRecords", new BsonDocument{ { "$sum", 1 } } },
{ "RequestTime", new BsonDocument("$sum", "$RequestTime") },
{ "ProcessTime", new BsonDocument("$sum", "$ProcessTime") },
{ "AvgRequestTime", new BsonDocument("$avg", "$RequestTime") },
{ "AvProcessTime", new BsonDocument("$avg", "$ProcessTime") },
{ "IsResponseRecieved", new BsonDocument("$sum", { $cond: [{ $eq: ["$IsResponseRecieved", false] }, 1, 0] } })
}
}
}
};
var pipeline = new [] { group };
var res = LogDB.GetCollection<BsonDocument>("tblLogs").Aggregate<BsonDocument>(pipeline).ToList();
最简单的方法是用下面的代码将json的blob解析成BSON文档。
var group = new BsonDocument
{
{
"$group",
new BsonDocument
{
{ "_id", new BsonDocument{ { "Class", "$Class" } } },
{ "TotaRecords", new BsonDocument{ { "$sum", 1 } } },
{ "RequestTime", new BsonDocument("$sum", "$RequestTime") },
{ "ProcessTime", new BsonDocument("$sum", "$ProcessTime") },
{ "AvgRequestTime", new BsonDocument("$avg", "$RequestTime") },
{ "AvProcessTime", new BsonDocument("$avg", "$ProcessTime") },
{ "IsResponseRecieved", new BsonDocument("$sum", BsonDocument.Parse(@"{ $cond: [{ $eq: [""$IsResponseRecieved"", false]}, 1, 0] }")) }
}
}
};
你可以创建一个像下面这样的类型化的 bson 文档。
var isResponseRecieved = new BsonDocument("$cond",
new BsonArray(new BsonValue[]
{
new BsonDocument("$eq",
new BsonArray(new BsonValue[]{ "$IsResponseRecieved" , false})),
1,
0
}));
var group = new BsonDocument
{
{
"$group",
new BsonDocument
{
{ "_id", new BsonDocument{ { "Class", "$Class" } } },
{ "TotaRecords", new BsonDocument{ { "$sum", 1 } } },
{ "RequestTime", new BsonDocument("$sum", "$RequestTime") },
{ "ProcessTime", new BsonDocument("$sum", "$ProcessTime") },
{ "AvgRequestTime", new BsonDocument("$avg", "$RequestTime") },
{ "AvProcessTime", new BsonDocument("$avg", "$ProcessTime") },
{ "IsResponseRecieved", isResponseRecieved }
}
}
};