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:管道内部查找错误:错误:参数必须是聚合管道运算符