我收藏了一些电影,包括标题,作家,评分,演员和其他领域。

我正在尝试查找电影中至少有一个演员的名字和姓氏以C开头,并显示标题和演员。
演员是一个由演员组成的数组(名字和姓在同一字段上),例如:{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开头。

我想知道是否有一种使用正则表达式的方法,例如检查以整个字符串中的某某开头的所有单词。

最佳答案

您提供的正则表达式不正确。 ^C.C的解释


^-匹配行首
C-匹配字符C
。 -匹配任何单个字符
C-匹配字符C


基本上,它将匹配第一个和第三个字母为C的任何演员名称。

而是尝试使用此正则表达式:^C.* C。说明:


^-匹配行首
C-匹配字符C
。*-匹配零到无限次之间的任何字符
(space)C-匹配一个后跟一个C的空格(假定姓氏与名字之间用空格分隔)


Mongo代码:

db.movieDetails.find({
  actors: {
    $regex: "^C.* C",
    $options: "i"
  }
});

10-06 07:47