[英]StartsWith & Contains with looslely typed mongodb data
我可以使用以下内容对 MongoDB 中的松散类型数据进行精确匹配:
var mongoClient = new MongoClient(con);
IMongoDatabase mongoDatabase = mongoClient.GetDatabase("mydb");
var profile = mongoDatabase.GetCollection<BsonDocument>("profiles");
var query = profile.AsQueryable();
var results = query.Where(x => x["first_name"] == "john").Take(10);
但是我如何使用相同的方法来做StartsWith
和Contains
呢?
我试过:
var results = query.Where(x => x["first_name"].AsString.Contains("john")).Take(10);
但我收到错误:
无法使用类型为“MongoDB.Bson.BsonValue”的实例调用在“System.String”类型上声明的方法“Boolean Contains(System.String)”
如何使用这些过滤器?
MongoDB .NET Driver 提供了LinqExtensions.Inject ,您可以将FilterDefinition
注入到 LINQ where 子句中。
从过滤器开始
using MongoDB.Driver.Linq;
var filter = Builders<BsonDocument>
.Filter
.Regex("first_name", "^" + "john" + ".*");
var results = query.Where(x => filter.Inject())
.Take(10);
包含过滤器
using MongoDB.Driver.Linq;
var filter = Builders<BsonDocument>
.Filter
.Regex("first_name", "john");
var results = query.Where(x => filter.Inject())
.Take(10);
如果您转换为 string 而不是使用AsString
,它应该可以工作:
var results = query.Where(x => ((string) x["first_name"]).Contains("john")).Take(10);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.