分组来自字段的字符串而不是mongodb中的整个字段

时间:2013-09-30 05:57:15

标签: mongodb

我想知道对于mongodb中某个字段的特定子字符串是否可以使用group by,而不是将整个字段本身分组。

例如: 我有一个字段PostId包含值abcde:123,abcde:456,abcde:789 .....字段名称是 PostId。 我可以只用字符串 abcde 而不是整个字段(abcde:123)进行分组。

我尝试了以下查询,它将整个postid字段分组。但我要求它只是按照postId中字符串的一部分进行分组。


db.noundata.aggregate({
  $match: {
    EntityId: 334,
    SubProductId: 1,
    AdjScore: {
      $gt: 0.0
    },
    NounWord: 'foot'
  }
}, {
  $group: {
    _id: {
      PostId: "$PostId"
    },
    NounWeightage: {
      $sum: 1
    }
  }
}, {
  $sort: {
    AdjScore: -1
  }
}, {
  $limit: 10
})

我需要的是,是否有可能通过正则表达式而不是整个字段进行分组

感谢名单

1 个答案:

答案 0 :(得分:1)

您可以在$ project中的聚合框架中使用$substr来提取字符串所需的部分。你可以用它来分组。

一个例子:

> db.collection.aggregate({$project:{a_whole:'$a',a_substr:{$substr:['$a',2,3]}}})
{
    "result" : [
        {
            "a_whole" : "abc:123",
            "a_substr" : "c:1"
        },
        {
            "a_whole" : "ab:123",
            "a_substr" : ":12"
        },
        {
            "a_whole" : "abcd:123",
            "a_substr" : "cd:"
        }
    ],
    "ok" : 1
}