c# Mongo.Driver实现多字段模糊查询 or like
南风 2022-08-15 18:53 493

我们项目中使用mongodb作为数据库来实现地理坐标距离计算,我是通过aggregation pipeline(聚合管道)创建查询的。

产品需求:根据名称模糊过滤(单个字段)

var client = new MongoClient("mongodb://127.0.0.1:27017");
            var db = client.GetDatabase("xxxLocations");
            var places = db.GetCollection<Places>("Places");

var queryCondition = new BsonDocument
            {
                {"IsDeleted",0 }
            };

            string keyword = "哈哈";
            queryCondition.Add("Name", new BsonRegularExpression($"/{keyword}/"));


            var match = new BsonDocument
            {
                {"$match",queryCondition  }
            };

            searchConditions.Add(match);
            

            var list = places.Aggregate(PipelineDefinition<Places, Places>.Create(searchConditions)).ToList();

产品需求2:根据多个字段模糊过滤

var client = new MongoClient("mongodb://127.0.0.1:27017");
            var db = client.GetDatabase("xxxLocations");
            var places = db.GetCollection<Places>("Places");

var queryCondition = new BsonDocument
            {
                {"IsDeleted",0 }
            };

            string keyword = "哈哈";
            //queryCondition.Add("Name", new BsonRegularExpression($"/{keyword}/"));

            //手动高亮
            var orLikeArray = new BsonArray {
                {
                    new BsonDocument
                    {
                        {"Name",new BsonRegularExpression($"/{keyword}/") }
                    }
                },
                {
                    new BsonDocument
                    {
                        {"NickName",new BsonRegularExpression($"/{keyword}/") }
                    }
                }
            };


            var bsonOr = new BsonDocument
            {
                {
                    "$or",orLikeArray
                }
            };

            queryCondition.AddRange(bsonOr);
            //手动高亮结束

            var match = new BsonDocument
            {
                {"$match",queryCondition  }
            };

            searchConditions.Add(match);
            

            var list = places.Aggregate(PipelineDefinition<Places, Places>.Create(searchConditions)).ToList();

目前还没有研究透mongodb.driver,还有很多东西等我去探索,这里只是demo记录一下mongodb多字段模糊搜索的一个方式。

本网站提供的文章除原创外均转载自其他网站,本网站只为更好的记录及学习技术经验
若网站内转载的文章侵犯了您的版权,请通过 意见反馈 告知本网站,我们会尽快删除相关信息
Copyright©2021-2021 kcBlog博客 版权所有 粤ICP备2021119076号 v1.0.0 栈谷统计