如何在MongoDB中使用单个查询来计算最大date?

我有Postcollections,如下所示:

 { "_id" : ObjectId(..), "date" : ISODate("2014-03-01T08:00:00Z") } { "_id" : ObjectId(..), "date" : ISODate("2014-03-01T09:00:00Z") } { "_id" : ObjectId(..), "date" : ISODate("2014-03-15T09:00:00Z") } { "_id" : ObjectId(..), "date" : ISODate("2014-04-04T11:21:39.736Z") } { "_id" : ObjectId(..), "date" : ISODate("2014-04-04T21:23:13.331Z") } 

我需要得到总数和最大date。 所以上面的coeumtns所需的结果如下:

 {count: 5, date: ISODate("2014-04-04T21:23:13.331Z")} 

如何获得所需的结果与单个查询到MongoDB没有处理和计数在应用程序代码?

编辑: @chridam感谢您的答复。 我接受你的答案是最好的! 可以帮助我多一件事?

比方说,post还没有存在,所以我需要获取零计数和当前date的结果作为时间戳,如下所示:

 {count: 0, [Date.now()]} 

MongoDB有可能吗?

使用$max$sum操作符

 Model.aggregate([ { "$group": { "_id": null, "count": { "$sum": 1 }, "date": { "$max": "$date" } } } ]).exec(function (err, result) { console.log(result); }) 

编辑 :解决您的进一步的问题与空集合,聚合函数将返回一个空的游标,因为那里不会是集合中的任何文档进行聚合。 所以你需要在客户端上解决这个逻辑,即检查上述聚合的结果,如果结果是一个空数组,则根据需要创build占位符文档:

 Model.aggregate([ { "$group": { "_id": null, "count": { "$sum": 1 }, "date": { "$max": "$date" } } } ]).exec(function (err, result) { console.log(result); if (!result.length) { result = [{ count:0, date: new Date() }]; } });