c# Mongo.Driver实现多字段模糊查询 or like

我们项目中使用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();

功能弄出来后,经过测试后,我屁颠屁颠的冲了杯咖啡,准备好上生产,然后市场姐姐就过来告诉我,这个模糊搜索要可以多个字段,我的内心是拒绝的,但...人家是“衣食父母”,嗯,然后就有了多个字段的版本。

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

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多字段模糊搜索的一个方式。

posted @ 2021-10-13 11:48  深海空气  阅读(925)  评论(0编辑  收藏  举报