MongoDB聚合错误:管道阶段规范对象必须只包含一个字段

nan*_*eck 18 mongodb mongodb-query aggregation-framework

我是mongodb的新手并且第一次尝试聚合.在这里,我试图按每15分钟对推文进行分组.当我尝试在mongo控制台中运行以下查询时,我收到错误:

管道阶段规范对象必须只包含一个字段.

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

我无法在SO中找到原因的好解释.请分享您对此主题的看法以及查询错误的原因.

chr*_*dam 25

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 */
    }
])
Run Code Online (Sandbox Code Playgroud)

应该$sum$group管道中具有聚合累加器:

    { 
        "$group": {
            "_id": {
                "year": { "$year": "$tweettime" },
                "dayOfYear": { "$dayOfYear": "$tweettime" },
                "interval": {
                    "$subtract": [ 
                        { "$minute": "$tweettime" },
                        { "$mod": [{ "$minute": "$tweettime"}, 15] }
                    ]
                }
            },
            "count": { "$sum": 1 }
        }           
    }
])
Run Code Online (Sandbox Code Playgroud)