Как найти подстроку в поле в Mongodb
Как я могу найти все объекты в базе данных, где поле объекта содержит подстроку?
Если поле является A в объекте коллекции со строковым значением:
Я хочу найти все объекты в базе данных db, где A содержит подстроку, например "abc def".
Я пробовал:
db.database.find({A: {$regex: '/^*(abc def)*$/''}})
но не работает
UPDATE
Действительная строка (в юникоде):
Sujet Commentaire sur Star Wars Episode III - La Revanche des Sith 1
Нужно искать все записи в Star Wars
db.test.find({A: {$regex: '^*(star wars)*$''}}) not wokring
Ответы
Ответ 1
Вместо этого:
db.database.find({A: {$regex: '/^*(abc def)*$/''}})
Вы должны сделать это:
db.database.find({A: /abc def/i })
^ * на самом деле не действительный синтаксис, поскольку ^ и $являются якорями, а не повторяющимися. Вы, вероятно, имели в виду ^. * Здесь. Но нет необходимости в ^. *, Поскольку это просто означает "Все до символа следующего" и (abc def) * означает "0 или более раз" abc def ", но оно должно быть в конце строки, из-за вашего $." i" в конце - сделать регистр нечувствительным.
Ответ 2
Просто используйте строку "Звездные войны", а $regex
сделает все остальное
db.test.find({A: {$regex: 'Star Wars'}})
Ответ 3
$regex
слишком дорогой/медленный для больших коллекций.
Я бы предложил использовать структуру агрегации и $ indexOfCP.
db.test.aggregate([{$match:
{$expr: { $gt: [{ $indexOfCP: [ "$A", "Star Wars" ] }, -1]}}
}, {$project: {A:1}}])
Для поиска без $toLower
регистра я могу добавить $toLower
в микс.