Вхождение двух слов с конкретными инициалами MongoDB - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть коллекция фильмов с названиями, авторами, оценками, актерами и другими полями.

Я пытаюсь найти фильмы по крайней мере с одним актером с именем и фамилией, начинающимися с буквы C, и показатьНазвание и актеры.Actors - это массив с актерами (имя, затем фамилия в том же поле), например: {Matt Damon, Bradd Pitt} и т. Д. *

Я пробовал с этим:

db.movieDetails.find( 
  { actors: { $regex: "^C.C" , $options: 'i' } }, 
  {_id:0, title:1, actors:1} 
);

а также с агрегацией, подобной этой:

db.movieDetails.aggregate(
  {$unwind: '$actors'},
  {$match: { actors: { $regex: "^C.C", $options: 'i' } } },
  {$group: {_id: { actors: '$actors' , title: "$title" }}}
);

Но я просто пытаюсь избежать проблемы, посмотрев, когда есть актер, начинающийся с C, и другое вхождение, и это решение работает только частично, потому что оно возвращаетмне фильмы с двумя актерами, чье имя начинается с буквы C.

Я хотел бы знать, есть ли способ использовать регулярное выражение, например, для проверки всех слов, начинающихся с чего-то во всей строке.

1 Ответ

0 голосов
/ 27 ноября 2018

Указанное вами регулярное выражение неверно.Объяснение ^C.C

  • ^ - соответствует началу строки
  • C - соответствует символу C
  • . - соответствует любому одному символу
  • C - соответствует символу C

В основном,оно будет соответствовать любому имени актера, где 1-я и 3-я буквы - C.

Вместо этого попробуйте это регулярное выражение: ^C.* C.Пояснение:

  • ^ - соответствует началу строки
  • C - соответствует символу C
  • . * - соответствует любому символу от нуля до неограниченного времени
  • (пробел) C - соответствует пробелу, за которым следует C (предполагается, чтофамилия отделяется от имени пробелом)

Код Монго:

db.movieDetails.find({
  actors: {
    $regex: "^C.* C",
    $options: "i"
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...