【问题标题】:MongoDB Aggregation error : Pipeline stage specification object must contain exactly one fieldMongoDB 聚合错误:管道阶段规范对象必须只包含一个字段
【发布时间】: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 中找不到一个很好的原因解释。请分享您对此主题的想法以及为什么我的查询有错误。

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案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 }
            }           
        }
    ])
    

    【讨论】:

      猜你喜欢
      • 2017-09-20
      • 2020-02-04
      • 2013-12-08
      • 2016-12-27
      • 2017-07-17
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多