zoukankan      html  css  js  c++  java
  • .netcore mongodb 分页+模糊查询+多条件查询

    .netcore MongoDB.Driver 版本才2.8 与aspnet差距太大,网上找很多资料没有现成的代码。

            public override async Task<PagerList<NewsContentDto>> PagerQueryAsync(NewsContentQuery parameter)
            {
                FilterDefinitionBuilder<NewsContentDto> builder = Builders<NewsContentDto>.Filter;
                string p = parameter.Keyword == null? $".*{Regex.Escape("")}.*": $".*{Regex.Escape(parameter.Keyword)}.*";
                FilterDefinition <NewsContentDto> filter2 = builder.Regex("title", new BsonRegularExpression(new Regex(p, RegexOptions.IgnoreCase)));
                //var filter1 = Builders<T>.Filter.Regex("title", new BsonRegularExpression(new Regex(".*" + Regex.Escape("英超") + ".*", RegexOptions.IgnoreCase)));
                //var filter1 = Filter.Regex(x => x.EnglishName, new MongoDB.Bson.BsonRegularExpression(parameter.Keyword, "i"));
                //BsonDocument filter = new BsonDocument {{"title", $"/{parameter.Keyword}/" } };
                //if(parameter.classifyId>0) filter.Add("classifyId", parameter.classifyId);
                
                var query = new QueryMongoParameter<NewsContentDto>(parameter, "news_content", filter2);
                var ret = await MongoContext.PagerQueryAsync(query);
                return ret;
            }

     分页查询

            public async Task<PagerList<T>> PagerQueryAsync<T>(QueryMongoParameter<T> query)
            {
                var skip = (query.Page - 1) * query.PageSize;
                var collection = _database.GetCollection<T>(query.CollectName);
                var data = await collection.Find(query.Filter).Sort(query.Sort).Project(query.Projection).Skip(skip).Limit(query.PageSize).ToListAsync();
                var total = await collection.CountAsync(query.Filter);
                var ret = new List<T>();
                data.ForEach(d =>
                {
                    string s = d.ToString().Replace(""_id"", ""id"");
                    ret.Add(Helpers.Json.ToObject<T>(s));
                });
                return new PagerList<T>(query.Page, query.PageSize, (int)total, ret);
            }

    补充

        public class PageMongoParameter : ParameterBase
        {
            public BsonDocument Sort { get; }
            public BsonDocument Skip { get; }
            public BsonDocument Limit { get;}        
            public BsonDocument Filter2 { get; }
    
            public BsonDocument[] Pipeline { get; set; }
            public PageMongoParameter(PageRequest req, string collectName, BsonDocument filter=null,BsonDocument sort=null, BsonDocument filter2 = null)
            {
                CollectName = collectName;
                Page = req.pageindex;
                PageSize = req.pagesize;
                Limit = new BsonDocument { { "$limit", PageSize } };
                Skip = new BsonDocument { { "$skip", (Page-1)*PageSize} };
    
                if (sort == null)
                {
                    if (!string.IsNullOrEmpty(req.order)) Sort = new BsonDocument { { "$sort", new BsonDocument { { req.order, 1 } } } };
                }
                else
                {
                    Sort = sort;
                }
    
                if (filter != null && filter2==null)
                {
                    var dom = filter.GetElement(0);
                    Filter2 = BsonDocument.Parse(dom.Value.ToJson());
                }
                Filter2 = Filter2 ?? new BsonDocument();
    
                if (filter == null && Sort == null)
                    Pipeline = new[] {Skip, Limit};
                else
                {
                    if(filter!=null && Sort != null)
                        Pipeline = new[] { filter,Skip, Limit,Sort };
                    else
                        Pipeline = filter == null ? new[] {Skip, Limit, Sort} : new[] { filter,Skip, Limit};
                }
            }
            
    
        }
  • 相关阅读:
    Java调用CMD命令
    java在线截图---通过指定的URL对网站截图
    【好的技术员网站】蓝飞技术部落格==蓝飞技术部落格==蓝飞技术部落格
    事务管理最佳实践全面解析
    Javascript摸拟自由落体与上抛运动 说明!
    dwz中给表单项获取,设置值
    jquery操作select(取值,设置选中)[转]
    Flex 笔记整理 三
    Myeclipse 工具优化 [内存一直增加, jsp,javascript 编辑很卡]
    Spring: 读取 .properties 文件地址,json转java对象,el使用java类方法相关 (十三)
  • 原文地址:https://www.cnblogs.com/he-bo/p/11189737.html
Copyright © 2011-2022 走看看