繁体   English   中英

StartsWith 和包含松散类型的 mongodb 数据

[英]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);

但是我如何使用相同的方法来做StartsWithContains呢?

我试过:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM