我收藏了一些电影,包括标题,作家,评分,演员和其他领域。
我正在尝试查找电影中至少有一个演员的名字和姓氏以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"
}
});