将$match集成到聚合查询MongoDB中
尝试对文档进行分组,然后将日期范围限制为如下所示:将$match集成到聚合查询MongoDB中,mongodb,aggregation-framework,Mongodb,Aggregation Framework,尝试对文档进行分组,然后将日期范围限制为如下所示: db.checkins.aggregate([{ "$group": { _id: "$movie_id", count: { "$sum": 1 } } }, { "$match": { createdAt: { $gte: ISODate("2015-07-21T21:38:39.987Z"), $lte: ISODate("2015-07-28T21:38:39.987Z") }} }, { "$sort"
db.checkins.aggregate([{
"$group": { _id: "$movie_id", count: { "$sum": 1 } }
},
{
"$match": { createdAt: { $gte: ISODate("2015-07-21T21:38:39.987Z"), $lte: ISODate("2015-07-28T21:38:39.987Z") }}
},
{
"$sort": {count: -1}
}
])
{
movie_id: String,
createdAt: {
type: Date,
default: Date.now
}
}
我的收藏如下:
db.checkins.aggregate([{
"$group": { _id: "$movie_id", count: { "$sum": 1 } }
},
{
"$match": { createdAt: { $gte: ISODate("2015-07-21T21:38:39.987Z"), $lte: ISODate("2015-07-28T21:38:39.987Z") }}
},
{
"$sort": {count: -1}
}
])
{
movie_id: String,
createdAt: {
type: Date,
default: Date.now
}
}
如果删除$match
,则返回正确的数据,所有数据都正确分组。但是,如果包含$match
,则不会返回任何数据,只返回一个空数组
有什么想法吗
(显然,我已经检查了这些日期范围的数据是否存在!)它位于错误的位置。将
$match
放在第一位。想想unix管道grep | sed | awk
。这意味着东西只能从上一阶段的“输出”流入下一管道阶段。@BlakesSeven Ace,谢谢!它放错地方了。将$match
放在第一位。想想unix管道grep | sed | awk
。这意味着东西只能从上一阶段的“输出”流入下一管道阶段。@BlakesSeven Ace,谢谢!