2014-02-25 38 views
0

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; 

我知道這是不可能執行。 我該怎麼做?

回答

2

鑑於你查詢的性質,蒙戈需要去集合中的每個文件,做一個潛在的昂貴的操作。

當您嘗試以不支持的方式執行包含匹配時,無法有效使用正則表達式。您試圖查詢字段中是否包含任何給定的值。你只能通過一種模式。所以,如果你知道它總是一組特定的字符或以某種方式,你需要編寫一個專門查找它的表達式。鑑於你的樣本,這可能是不可能的。

您可以通過構建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); 
0

您可以使用正則表達式

var regex = new Regex("xxx ccc vvvv"); 
var query = 
    from d in collection.AsQueryable<AAA>() 
    where regex.IsMatch(d.Name) 
    select d; 
+1

這不會爲工作樣本數據。他需要的正則表達式是倒置的 - 是字符串中的Name,它需要根據字段中存儲的值構建正則表達式。 – WiredPrairie

0

分割你的字符串爲單個值的陣列,使LINQ使用$in有效地執行查詢:

string arg = "xxx ccc vvvv"; 
var match = from d in collection.AsQueryable<AAA>() 
      where arg.Split().Contains(d.name) 
      select d;