将$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,谢谢!