【问题标题】:Occurance of two words with specific initials MongoDB出现两个带有特定首字母的单词MongoDB
【发布时间】:2018-11-27 14:24:50
【问题描述】:

我收藏了一系列包含标题、作者、评分、演员和其他字段的电影。

我正在尝试查找至少有一个名字和姓氏以 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 开头.

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

【问题讨论】:

    标签: javascript regex string mongodb nosql


    【解决方案1】:

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

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

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

    试试这个正则表达式:^C.* C。解释:

    • ^ - 匹配行首
    • C - 匹配字符 C
    • .* - 匹配任意字符零次到无限次
    • (space)C - 匹配一个空格后跟一个 C(假设姓与名之间用空格隔开)

    Mongo 代码:

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

    【讨论】:

    • 谢谢,您的解决方案完美运行,现在我完全理解正则表达式了。
    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    相关资源
    最近更新 更多