Ответ 1
Вам нужно выйти $
на \
:
db.myCollection.find({ myKey : /.*\$aus.*/i });
// OR
db.myCollection.find({myKey: { $regex: '.*\\$aus.*', $options: 'i'}})
Я хочу искать значения, содержащие специальные символы, такие как " $ / . @ > "
в документе.
Давайте рассмотрим, у меня есть myKey со значениями, такими как "test$australia", "test$austria", "test$belgium", "green.africa".
Я хочу найти значения с помощью '.*$aus.*',
Например,
db.myCollection.find({ myKey : /.*$aus.*/i });
ИЛИ
db.myCollection.find({ myKey : { '$regex' : '.*$aus.*','$options' : 'i' });
Выше запросов не работает, как я должен формировать запрос? Я использую MongoDB 2.4.1.
Вам нужно выйти $
на \
:
db.myCollection.find({ myKey : /.*\$aus.*/i });
// OR
db.myCollection.find({myKey: { $regex: '.*\\$aus.*', $options: 'i'}})
db.test.insert({word: 'hai('});
db.test.insert({word: 'jana'});
Результат будет таким:
{ "_id" : ObjectId("56f27fb71d843581261433c6"), "word" : "hai(" }
{ "_id" : ObjectId("56f27ffe1d843581261433c8"), "word" : "jana" }
Примечание. Хотите использовать специальную строку char, поэтому
db.test.find({word:{$regex:"\\("}});
Результат будет таким:
{ "_id" : ObjectId("56f27fb71d843581261433c6"), "word" : "hai(" }
Escape всех специальных символов регулярных выражений:
req.query.name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
Создайте запрос с регулярным выражением и опцией "i" (игнорировать регистр):
const databaseQuery.name = new RegExp('${req.query.name}', 'i');
Выполните поиск по запросу:
db.collection.find(databaseQuery)
Примечание. Не забудьте создать индексы для полей, которые вы будете искать. Поля индексирования увеличивают скорость ваших запросов в регулярном выражении. В моем случае для моего поля "имя" было бы так:
db.collection.createIndex({ name: "text" })
Вы можете использовать это:
db.myCollection.find({myKey:{ $regex:new RegExp('^' + 'test$australia'.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '$', 'i')}})
Вы можете использовать https://www.npmjs.com/package/regex-escape. Это хорошая библиотека для экранирования специальных символов для использования в регулярных выражениях
var RegexEscape = require("regex-escape");
let keyword = RegexEscape("{#/}");
// => \{#\/\}
db.myCollection.find({ myKey : { '$regex' : keyword, '$options' : 'mi' });