mongodb AggregateAsync 一种优化思路

mongodb 获取数据 用AggregateAsync 只能用BsonDocument来获取结果
但是数据很多的话 result.ToList() 这里就会特别慢
后来想到优化的方法
把查询的结果放进redis 记录一个保存时间 如果查询时间大于保存时间 把这个时间差的内容 再拼接进去 如果小于保存时间 直接取出结果 去转化 速度快很多

var stages = new List();
stages.Add(new JsonPipelineStageDefinition("{KaTeX parse error: Can't use function '\"' in math mode at position 8: unwind:\̲"̲Logs"}"));
stages.Add(new JsonPipelineStageDefinition("{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(stages);
var result = await Collection1.AggregateAsync(pipeline);

        var loglist = new List();

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

你可能感兴趣的:(随笔,C#)