MongoDB的數據:MongoDB的C#驅動查詢包含字符串ARG
{
name: "ccc"
}
C#驅動:
string arg = "xxx ccc vvvv";
var match = from d in collection.AsQueryable<AAA>()
where arg.Contains(d.name)
select d;
我知道這是不可能執行。 我該怎麼做?
MongoDB的數據:MongoDB的C#驅動查詢包含字符串ARG
{
name: "ccc"
}
C#驅動:
string arg = "xxx ccc vvvv";
var match = from d in collection.AsQueryable<AAA>()
where arg.Contains(d.name)
select d;
我知道這是不可能執行。 我該怎麼做?
鑑於你查詢的性質,蒙戈需要去集合中的每個文件,做一個潛在的昂貴的操作。
當您嘗試以不支持的方式執行包含匹配時,無法有效使用正則表達式。您試圖查詢字段中是否包含任何給定的值。你只能通過一種模式。所以,如果你知道它總是一組特定的字符或以某種方式,你需要編寫一個專門查找它的表達式。鑑於你的樣本,這可能是不可能的。
您可以通過構建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);
您可以使用正則表達式
var regex = new Regex("xxx ccc vvvv");
var query =
from d in collection.AsQueryable<AAA>()
where regex.IsMatch(d.Name)
select d;
分割你的字符串爲單個值的陣列,使LINQ使用$in
有效地執行查詢:
string arg = "xxx ccc vvvv";
var match = from d in collection.AsQueryable<AAA>()
where arg.Split().Contains(d.name)
select d;
這不會爲工作樣本數據。他需要的正則表達式是倒置的 - 是字符串中的Name,它需要根據字段中存儲的值構建正則表達式。 – WiredPrairie