2017-02-09 5 views
8

мне нужно построить следующий запрос с использованием MongoDB C Водитель #Использование MongoDB C# Драйвер ElementMatch записи с Regex запроса

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)) 

Он генерируется MONGO запрос как

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

если вы заметили, что это добавление s по адресу /batch/s вместо i /batch/i

Как я могу получить эту работу? Мне нужно сделать это для фильтров, как

  1. содержит, используя .Contains()
  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