mongodb 获取数据 用AggregateAsync 只能用BsonDocument来获取结果
但是数据很多的话 result.ToList() 这里就会特别慢
后来想到优化的方法
把查询的结果放进redis 记录一个保存时间 如果查询时间大于保存时间 把这个时间差的内容 再拼接进去 如果小于保存时间 直接取出结果 去转化 速度快很多
var stages = new List();
stages.Add(new JsonPipelineStageDefinition<BsonDocument, BsonDocument>("{KaTeX parse error: Can't use function '\"' in math mode at position 8: unwind:\̲"̲Logs"}"));
stages.Add(new JsonPipelineStageDefinition<BsonDocument, BsonDocument>("{KaTeX parse error: Can't use function '\"' in math mode at position 8: match:{\̲"̲Logs.time\":{gte:’" + stime.ToString(“yyyy-MM-dd HH:mm:ss”) + "’,KaTeX parse error: Expected 'EOF', got '}' at position 52: …HH:mm:ss") + "'}̲}}"));
…replaceRoot:{newRoot: “KaTeX parse error: Can't use function '\"' in math mode at position 5: Logs\̲"̲}}"));
…project:{ “host”:1,“request_uri”:1,“body_bytes_sent”:1,“client_ip”:1,“http_referer”:1,“request_time”:1,“time”:1,“vip_addr”:1,“request_method”:1,“request_length”:1,“upstream_status”:1}}”));
var pipeline = new PipelineStagePipelineDefinition<BsonDocument, BsonDocument>(stages);
var result = await Collection1.AggregateAsync(pipeline);
var loglist = new List<LogListInfo>();
foreach (var item in result.ToList())
{
loglist.Add(new LogListInfo()
{
Body_bytes_sent = long.Parse(item.Values.ToArray()[0].ToString()),
Client_ip = item.Values.ToArray()[1].ToString(),
Host = item.Values.ToArray()[2].ToString(),
Http_referer = item.Values.ToArray()[3].ToString(),
Request_length = item.Values.ToArray()[4].ToString().Contains("|") ? 0 : long.Parse(item.Values.ToArray()[4].ToString()),
Request_method = item.Values.ToArray()[5].ToString(),
Request_time = float.Parse(item.Values.ToArray()[6].ToString()),
Request_uri = item.Values.ToArray()[7].ToString(),
Status = item.Values.ToArray()[9].ToString() == "-" ? 0 : int.Parse(item.Values.ToArray()[9].ToString()),
Time = DateTimeToUnixTimestamp(Convert.ToDateTime(item.Values.ToArray()[8].ToString())),
CountTime = Convert.ToDateTime(item.Values.ToArray()[8].ToString()).ToString("MM-dd HH:mm"),
Vip_addr = item.Values.ToArray()[10].ToString()
});
}