2017-02-14 13 views
3

mongodbを初めて使用し、集計を初めて試みました。ここでは、つぶやきの数を15分ごとに集計しようとしています。私はMongoのコンソールで以下のクエリを実行しようとすると、私はエラーを取得する:MongoDB集約エラー:パイプラインステージ指定オブジェクトには、正確に1つのフィールドが含まれている必要があります。

A pipeline stage specification object must contain exactly one field.

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

私はSOでの理由の良い説明を見つけることができませんでした。この主題についてのあなたの考えと、なぜ私の質問にエラーがあるのか​​を親切に伝えてください。

答えて

7

あなたのパイプラインに認識できないパイプラインステージ指定"count": { "$sum": 1 }があるので、MongoDBは苦情を申し立てています。

{ 
     "$group": { 
      "_id": { 
       "year": { "$year": "$tweettime" }, 
       "dayOfYear": { "$dayOfYear": "$tweettime" }, 
       "interval": { 
        "$subtract": [ 
         { "$minute": "$tweettime" }, 
         { "$mod": [{ "$minute": "$tweettime"}, 15] } 
        ] 
       } 
      }, 
      "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 */ 
    } 
]) 

をフォーマットし

あなたのオリジナルのパイプラインは、集約アキュムレータとして$groupパイプライン内$sumを持つべきです

関連する問題