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

Posted

技术标签:

【中文标题】MongoDB 聚合错误:管道阶段规范对象必须只包含一个字段【英文标题】:MongoDB Aggregation error : Pipeline stage specification object must contain exactly one field 【发布时间】:2017-07-03 02:38:40 【问题描述】:

我是 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 
    
])

我在 SO 中找不到一个很好的原因解释。请分享您对此主题的想法以及为什么我的查询有错误。

【问题讨论】:

【参考方案1】:

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 */
    
])

$group 管道中的聚合累加器 $sum 应为:

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

【讨论】:

以上是关于MongoDB 聚合错误:管道阶段规范对象必须只包含一个字段的主要内容,如果未能解决你的问题,请参考以下文章

管道阶段规范对象必须包含一个带有 php mongo 聚合的字段

MongoDb:管道内部查找错误:错误:参数必须是聚合管道运算符

MongoDb 聚合 $match 错误:“参数必须是聚合管道运算符”

MongoDB——聚合管道

MongoDB——聚合管道

Mongodb 聚合管道优化 - $match 的 2 阶段