Запрос MongoDB с несколькими поисковыми терминами (регулярными выражениями) в c # с драйвером 10gens? - PullRequest
3 голосов
/ 10 февраля 2012

Если у нас есть

Blog{
  Name 'Blog1'
  Tags ['testing','visual-studio','2010','c#']
}
Blog{
  Name 'Blog2'
  Tags ['parallel','microsoft','c#']
}

Через консоль мы можем выполнить и найти все сообщения в блоге, которые содержат некоторые из предоставленных тегов:

db.BlogPost.find({ 'Tags' : { '$regex' : ['/^Test/', '/^microsoft/', '/^visual/', '/^studio/', '/^c#/'] } });

Как мы можем написать тот же запросв C # 10Gens драйвер?Есть ли альтернатива, если она не может быть записана с помощью драйвера 10gens c #?

Query.Match поддерживает только одно регулярное выражение.Можем ли мы предоставить ему несколько регулярных выражений, или мы должны объединить

Query.Or(Query.Match("Test"), Query.Match("Micro"), Query.Match("Visual"))

Мне удалось решить это с помощью Мне удалось сделать это с

{ "$or" : [{ "Tags" : /^programm/i }, { "Tags" : /^microsoft/i }, { "Tags" : /^visual/i }, { "Tags" : /^studio/i }, { "Tags" : /^assert/i }, { "Tags" : /^2010/i }, { "Tags" : /^c#/i }] }

Но что-то подсказывает мне, чтоэто ужасный хак, который может привести к проблемам с производительностью.Как вы думаете, ребята?

Окончательный ответ на проблему можно найти на: Официальном форуме mongodb

1 Ответ

1 голос
/ 10 февраля 2012

Да, драйвер MongoDB c # должен автоматически делать правильные действия с экземплярами System.Text.RegularExpressions.Regex .

Таким образом, вы должны иметь возможность создавать точно такой же запрос, за исключением того, что вы будете использовать экземпляры Regex для ^ Test, ^ microsoft, ^ visual и т. Д. Вместо строк.

...