在$ group中的mongodb聚合框架中使用$ regex

use*_*121 9 regex mongodb aggregation-framework

请考虑以下示例:

db.article.aggregate(
  { $group : {
      _id : "$author",
      docsPerAuthor : { $sum : 1 },
      viewsPerAuthor : { $sum : "$pageViews" }
  }}
);
Run Code Online (Sandbox Code Playgroud)

这个由作者字段分组并计算两个字段.

我有$ author = FirstName_LastName的值.现在不是按$ author分组,而是希望由共享相同LastName的所有作者进行分组.

我试过$ regex在'_'后按所有匹配的字符串分组

$author.match(/_[a-zA-Z0-9]+$/)

db.article.aggregate(
  { $group : {
      _id : "$author".match(/_[a-zA-Z0-9]+$/),
      docsPerAuthor : { $sum : 1 },
      viewsPerAuthor : { $sum : "$pageViews" }
  }}
);

also tried the following:

 db.article.aggregate(
  { $group : {
      _id : {$author: {$regex: /_[a-zA-Z0-9]+$/}},
      docsPerAuthor : { $sum : 1 },
      viewsPerAuthor : { $sum : "$pageViews" }
  }}
);
Run Code Online (Sandbox Code Playgroud)

att*_*ish 6

实际上没有这样的方法提供这种功能,或者我找不到包含它的适当版本.我认为这不适用于$ regexp:http://docs.mongodb.org/manual/reference/operator/regex/它只是用于模式匹配.

jira中有一项改进请求:https://jira.mongodb.org/browse/SERVER-6773

它处于未解决的状态.但

在github我找到了这个讨论:https://github.com/mongodb/mongo/pull/336

如果你检查这个提交:https://github.com/nleite/mongo/commit/2dd175a5acda86aaad61f5eb9dab83ee19915709

它或多或少地包含了您可能拥有的方法.我并没有真正理解这种改进的状态:在2.2.3中它不起作用.