3

フィールド全体でグループ化するのではなく、mongodb のフィールドの特定の部分文字列に対してグループ化が可能かどうかを知りたいです。

例: 値 abcde:123、abcde:456、abcde:789 を含むフィールド PostId があります。フィールド名はPostId です。(abcde:123) であるフィールド全体ではなく、文字列abcde だけでグループ化できますか。

以下のクエリを試し、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
})

私が必要とするのは、フィールド全体ではなく正規表現でグループ化する方法はありますか

ありがとう

4

1 に答える 1

4

$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
}
于 2013-10-01T12:03:34.120 に答える