Как использовать MongoRegex (драйвер MongoDB C #)
-
22-09-2019 - |
Вопрос
У кого-нибудь есть какие-нибудь идеи, как использовать 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)
Не связан с StackOverflow