2

いくつかの条件に一致するドキュメントの数をカウントするパイプラインを作成しようとしています。ただし、条件で正規表現を使用する方法がわかりません。注釈付きのパイプラインの簡略化されたバージョンを次に示します。

db.Collection.aggregate([
    // Pipeline before the issue
    {'$group': {
        '_id': {
            'field': '$my_field', // Included for completeness
        },
        'first_count': {'$sum': {                    // We're going to count the number
            '$cond': [                               // of documents that have 'foo' in 
                {'$eq: ['$field_foo', 'foo']}, 1, 0  // $field_foo.
            ] 
        }},                                       

        'second_count': {'$sum': {                       // Here, I want to count the
            '$cond': [                                   // Number of documents where
                {'$regex': ['$field_bar', regex]}, 1, 0  // the value of 'bar' matches
            ]                                            // the regex 
        }},                                          
    },
    // Additional operations
])

構文が間違っていることはわかっていますが、これが私がやろうとしていることを伝えていることを願っています。$cond 操作でこの一致を実行する方法はありますか? または、代わりに、パイプラインの早い段階で一致を実行し、結果をドキュメントに保存して、この時点でブール値のみを一致させる可能性も考えています。

4

1 に答える 1