2

操作の一部として、値自体ではなく、計算された式を配列にプッシュしたいと思い$groupます。MongoDBはこれを行うことができますか?

たとえば、次のcようなドキュメントで名前が付けられたコレクションがあるとします。

{ "k" : 1, "v" : true }
{ "k" : 1, "v" : true }
{ "k" : 1, "v" : false }
{ "k" : 1, "v" : true }
{ "k" : 1, "v" : false }

次に、次のような集計を実行してv、配列内のすべての値を取得できます。

db.c.aggregate({$group: {_id:'$k', vals: {$push: '$v'}}})

{
    "result" : [
        {
            "_id" : 1,
            "vals" : [
                true,
                true,
                false,
                true,
                false
            ]
        }
    ],
    "ok" : 1
}

しかし、実際のtrueand値の代わりに、たとえばandfalseに変更したい場合はどうでしょうか? おそらく次のようなものです:'red''green'

db.c.aggregate({$group: {_id:'$k', vals: {$push: '$v' ? 'red' : 'green'}}})

しかし、残念ながら、これは all を出力するだけ'red'です。式で任意の値を計算することは可能$pushですか?

4

1 に答える 1

3

$condこれには( http://docs.mongodb.org/manual/reference/aggregation/cond/#exp._S_cond ) を使用できます。

db.c.aggregate( [
    { $project: {
        k: '$k',
        color: {
            $cond: [ 
                { $eq: [ '$v', true ] }, 
                'red', 
                'green'
            ]
        }
    } },
    { $group: {
        _id: '$k',
        vals: { '$push': '$color' }
    } }
] )

編集

別の編集で述べたように、正しい式として評価されていない$eqため、実際には機能する必要があります。{'$v':true}

于 2013-07-25T20:50:03.473 に答える