C# 字符串arg不能包含带字符串字段的mongodb C驱动器查询
mongodb数据:C# 字符串arg不能包含带字符串字段的mongodb C驱动器查询,c#,mongodb,C#,Mongodb,mongodb数据: { name: "ccc" } C驱动器: string arg = "xxx ccc vvvv"; var match = from d in collection.AsQueryable<AAA>() where arg.Contains(d.name) select d; 我知道表演是不可能的。 我怎么做呢?你可以使用正则表达式 var regex = new Regex("xxx ccc vvv
{
name: "ccc"
}
C驱动器:
string arg = "xxx ccc vvvv";
var match = from d in collection.AsQueryable<AAA>()
where arg.Contains(d.name)
select d;
我知道表演是不可能的。
我怎么做呢?你可以使用正则表达式
var regex = new Regex("xxx ccc vvvv");
var query =
from d in collection.AsQueryable<AAA>()
where regex.IsMatch(d.Name)
select d;
考虑到查询的性质,Mongo将需要访问集合中的每个文档,并执行一项可能代价高昂的操作 您无法有效地使用正则表达式,因为您试图以不受支持的方式进行包含匹配。您试图查询字段中的任何给定值是否包含在字符串中。你只能通过一个模式。因此,如果您知道它总是一组特定的字符或以某种方式,那么您需要编写一个表达式来专门查找它。鉴于你的样品,这可能是不可能的 您可以通过构造JavaScript使用$where运算符:
var arg = "xxx ccc vvvv";
var match = Query.Where(new BsonJavaScript("' + arg + '.indexOf(this.Name) > -1"));
不过,我认为还不能将BsonJavaScript对象与LINQ一起使用。您需要使用动态表达式生成器:
var results = collection.Find(match);
将字符串拆分为单个值的数组,以使LINQ能够使用$in高效地执行查询:
这对样本数据不起作用。他需要的正则表达式是倒排的——是字符串中的名称,需要从字段中存储的值构建正则表达式。
string arg = "xxx ccc vvvv";
var match = from d in collection.AsQueryable<AAA>()
where arg.Split().Contains(d.name)
select d;