web-dev-qa-db-ja.com

MongoDB集約エラー:パイプラインステージ仕様オブジェクトには、フィールドを1つだけ含める必要があります

私はmongodbを初めて使い、初めて集計を試みました。ここでは、15分ごとにグループ化されたツイートの数を取得しようとしています。 mongoコンソールで以下のクエリを実行しようとすると、エラーが発生します。

パイプラインステージ仕様オブジェクトには、フィールドを1つだけ含める必要があります。

    db.hashtag.aggregate([
    { "$group": {
        "_id": {
            "year": { "$year": "$tweettime" },
            "dayOfYear": { "$dayOfYear": "$tweettime" },
            "interval": {
                "$subtract": [ 
                    { "$minute": "$tweettime" },
                    { "$mod": [{ "$minute": "$tweettime"}, 15] }
                ]
            }
        }},
        "count": { "$sum": 1 }
    }
])

SOで理由の良い説明を見つけることができませんでした。この件に関するご意見と、クエリにエラーがある理由をお聞かせください。

17
nanospeck

認識できないパイプラインステージ仕様があるため、MongoDBは不満を言っています"count": { "$sum": 1 }パイプラインで。

適切にフォーマットされた場合の元のパイプライン

db.hashtag.aggregate([
    { 
        "$group": {
            "_id": {
                "year": { "$year": "$tweettime" },
                "dayOfYear": { "$dayOfYear": "$tweettime" },
                "interval": {
                    "$subtract": [ 
                        { "$minute": "$tweettime" },
                        { "$mod": [{ "$minute": "$tweettime"}, 15] }
                    ]
                }
            }
        },
        "count": { "$sum": 1 } /* unrecognised pipeline specification here */
    }
])

集計アキュムレータ$sum$groupパイプライン:

    { 
        "$group": {
            "_id": {
                "year": { "$year": "$tweettime" },
                "dayOfYear": { "$dayOfYear": "$tweettime" },
                "interval": {
                    "$subtract": [ 
                        { "$minute": "$tweettime" },
                        { "$mod": [{ "$minute": "$tweettime"}, 15] }
                    ]
                }
            },
            "count": { "$sum": 1 }
        }           
    }
])
23
chridam