Вопрос

У кого-нибудь есть какие-нибудь идеи, как использовать MongoRegex для поиска по документу?

Я попытался это сделать, но ничего не возвращает обратно:

var spec = new Document();
spec.Add("Name", new MongoRegex("/" + searchKey + "*/", "i"));
collection.Find(spec)

Задаваясь вопросом, почему это не работает, я попытался выполнить следующую команду с консоли:

db.things.find({"Name":/john*/i}) /* WORKS */
db.things.find({"Name":"/john*/i"}) /* DOESN'T WORK */

Возможно ли, что драйвер применяет двойные кавычки к регулярному выражению?

Спасибо..

Это было полезно?

Решение

вам просто нужен простой префиксный запрос.Тогда вашим регулярным выражением будет ^ + SearchKey .Кроме того, эта форма позволит mongodb использовать индекс для Name.

var spec = new Document("Name", new MongoRegex(string.Format("^{0}",searchKey), "i"));
collection.Find(spec)

Другие советы

Я думаю, вам не нужно включать символы "/" в C #, т.е.,

spec.Add("Name", new MongoRegex(searchKey + "*", "i"));

Покопавшись в исходном коде, я наконец нашел ответ :)

var spec = new Document();
spec.Add("Name", new MongoRegex(".*" + searchKey + ".*", "i"));
collection.Find(spec)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top