4

コレクションにこのようなドキュメントがあるとします

{
    _id: {
        element_id: '12345',
        name: 'foobar'
    },
    value: {
        count: 1
    }
}

私は集計フレームワークを使用して$group、次のようにしています

db.collection.aggregate([
    { $group: { _id: '$_id.element_id', total: { $sum: '$value.count' } } }
])

そして、の結果を得ました

{ "result" : [ { "_id" : null, "total" : 1 } ], "ok" : 1 }

_id結果のフィールドが null であることに注意してください。実験から、 $group はネストされたフィールド宣言を許可していないようです_id(例: $_id.element_id)。

どうしてこれなの?そして、それに対する回避策はありますか?

ありがとうございました。

4

2 に答える 2

12

を使用して回避策を見つけました$project

db.collection.aggregate([
    { $project: { element_id: '$_id.element_id', count: '$value.count' } },
    { $group: { _id: '$element_id', total: { $sum: '$count' } } }
])

$project フィールドの名前変更、追加、または削除により、ドキュメント ストリームを再形成します。

http://docs.mongodb.org/manual/reference/aggregation/#_S_project

于 2012-10-14T02:28:34.033 に答える
3

これはSERVER-7491 の問題であることが判明しました。2.2.2 (約 3 日前にリリース) で修正されたようです。

上記の回避策は、2.2.1 でうまく機能しました。注意として、$project の回避策 (2.2.2 より前) を使用して _id:0 の $project から _id を除外することは、非常に奇妙な動作をしているように見えるため、お勧めできません。同じ集計内の最終結果に _id フィールドがありませんでした。

于 2012-11-30T23:40:49.893 に答える