Подтвердить что ты не робот

Как найти подстроку в поле в 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
4b9b3361

Ответ 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 в микс.