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