2017-02-09 34 views
8

我需要使用MongoDB的C#驅動使用MongoDB的C#驅動程序寫入與正則表達式查詢ElementMatch

db.Notes.find({ "Group._id" : 74, "CustomFields" : { "$elemMatch" : { "Value" : /batch/i } }, "IsDeleted" : false }).sort({ "CreatedDateTimeUtc" : -1 }) 

我用這樣的

builder.ElemMatch(x => x.CustomFields, x => x.Value.Contains(filterValue)) 

查詢它產生蒙戈查詢作爲

構建以下查詢
db.Notes.find({ "Group._id" : 74, "CustomFields" : { "$elemMatch" : { "Value" : /batch/s } }, "IsDeleted" : false }).sort({ "CreatedDateTimeUtc" : -1 }) 

如果您發現它在/batch/s而不是i /batch/i

我該如何獲得這項工作?我需要這樣做的過濾器一樣

  1. 包含,使用。載有()
  2. 等於,使用.Equals的思考()
  3. 不含,使用的思維!Field.contains(值)
  4. 不等於
  5. 開始與
  6. 結束與

我可以做這樣的事情,讓我能將我的所有的正則表達式模式對上述所有過濾器。

builder.Regex(x => x.CustomFields[-1].Value, new BsonRegularExpression($"/{filterValue}/i")); 

此轉換查詢如下,但沒有得到任何結果

db.Notes.find({ "Project._id" : 74, "CustomFields.$.Value" : /bat/i, "IsDeleted" : false }).sort({ "CreatedDateTimeUtc" : -1 }) 

FYI:builderFilterDefinition<Note>

我的例子說明收藏是這樣的:

{ 
    Name:"", 
    Email:"", 
    Tel:"", 
    Date:02 /21/1945, 
    CustomFields:[ 
     { 
     Name:"", 
     Value:"", 
     IsSearchable:true, 

     }, 
     { 
     Name:"", 
     Value:"", 
     IsSearchable:true, 

     }, 
     { 
     Name:"", 
     Value:"", 
     IsSearchable:true, 

     }, 
     { 
     Name:"", 
     Value:"", 
     IsSearchable:true, 

     } 
    ] 
} 

回答

1

這聽起來像你所缺少的是不敏感的p藝術。你試過這個嗎?

ToLower將,ToLowerInvariant,ToUpper的,ToUpperInvariant(字符串方法) 這些方法用於測試文檔是否一個字符串字段或屬性 在不區分大小寫的方式一個值匹配。

根據1.1文檔here,它說,將允許執行不區分大小寫的正則表達式匹配。 目前的文檔沒有提到它,所以只是爲了確定,我檢查了github,並且創建一個不敏感匹配的代碼仍然是there

+0

不敏感的部分是一個,我也需要寫查詢,其中文本開始,文本結束與文本不包含。我想我只能用BsonRegularexpression來做這些事情? – HaBo

+0

對不起,我錯過了這個問題的一部分。 mongo驅動程序將正確處理'String.StartsWith()'和'String。EndsWith()',將它們分別轉換爲'/ ^'和'$ /'。它也應該把一個不是'!'變成一個mongo'$ not:{}' – Taekahn

+0

怎麼樣「不包含」搜索? – HaBo