MongoDB .NET 驱动程序 - StartsWith 和包含松散类型的数据
MongoDB .NET Driver - StartsWith & Contains with loosely typed 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);
但我收到错误消息:
Method 'Boolean Contains(System.String)' declared on type 'System.String' cannot be called with an instance of type 'MongoDB.Bson.BsonValue'
如何使用这些过滤器?
MongoDB .NET 驱动程序提供 LinqExtensions.Inject,您可以将 FilterDefinition
注入 LINQ where 子句。
Start with Filter
using MongoDB.Driver.Linq;
var filter = Builders<BsonDocument>
.Filter
.Regex("first_name", "^" + "john" + ".*");
var results = query.Where(x => filter.Inject())
.Take(10);
Contains Filter
using MongoDB.Driver.Linq;
var filter = Builders<BsonDocument>
.Filter
.Regex("first_name", "john");
var results = query.Where(x => filter.Inject())
.Take(10);
如果您转换为字符串而不是使用 AsString
,它应该可以工作:
var results = query.Where(x => ((string) x["first_name"]).Contains("john")).Take(10);
我可以使用以下内容对 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);
但我收到错误消息:
Method 'Boolean Contains(System.String)' declared on type 'System.String' cannot be called with an instance of type 'MongoDB.Bson.BsonValue'
如何使用这些过滤器?
MongoDB .NET 驱动程序提供 LinqExtensions.Inject,您可以将 FilterDefinition
注入 LINQ where 子句。
Start with Filter
using MongoDB.Driver.Linq;
var filter = Builders<BsonDocument>
.Filter
.Regex("first_name", "^" + "john" + ".*");
var results = query.Where(x => filter.Inject())
.Take(10);
Contains Filter
using MongoDB.Driver.Linq;
var filter = Builders<BsonDocument>
.Filter
.Regex("first_name", "john");
var results = query.Where(x => filter.Inject())
.Take(10);
如果您转换为字符串而不是使用 AsString
,它应该可以工作:
var results = query.Where(x => ((string) x["first_name"]).Contains("john")).Take(10);