mongodb数据:
{
name: "ccc"
}
C#drive:
string arg = "xxx ccc vvvv";
var match = from d in collection.AsQueryable<AAA>()
where arg.Contains(d.name)
select d;
我知道这是不可能的。 我该怎么办?
答案 0 :(得分:2)
鉴于查询的性质,Mongo需要访问集合中的每个文档并执行可能很昂贵的操作。
当您尝试以不受支持的方式执行包含匹配时,您无法有效地使用正则表达式。您正在尝试查询字段中的任何给定值是否包含在字符串中。你只能传递一个模式。所以,如果你知道它总是一组特定的字符或以某种方式,你需要编写一个专门寻找它的表达式。鉴于您的样本,这可能是不可能的。
您可以通过构建JavaScript来使用$where
运算符:
var arg = "xxx ccc vvvv";
var match = Query.Where(new BsonJavaScript("' + arg + '.indexOf(this.Name) > -1"));
我不相信你可以使用LINQ的BsonJavaScript
对象。您需要使用动态表达式构建器:
var results = collection.Find(match);
答案 1 :(得分:0)
您可以使用正则表达式
var regex = new Regex("xxx ccc vvvv");
var query =
from d in collection.AsQueryable<AAA>()
where regex.IsMatch(d.Name)
select d;
答案 2 :(得分:0)
将字符串拆分为单个值数组,以使LINQ能够使用$in
高效执行查询:
string arg = "xxx ccc vvvv";
var match = from d in collection.AsQueryable<AAA>()
where arg.Split().Contains(d.name)
select d;