gpt4 book ai didi

node.js - 如何在 MongoDB 中通过单个查询获取计数和最大日期?

转载 作者:可可西里 更新时间:2023-11-01 10:22:39 24 4
gpt4 key购买 nike

我有 Post 集合,如下所示:

{ "_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") }

我需要获取帖子的总数和最长发布日期。因此,上述 coeumtns 的预期结果如下:

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

如何在不在应用程序代码中处理和计数的情况下通过对 MongoDB 的单个查询获得所需的结果?

编辑: @chridam 感谢您的回复。我已经接受你的答案为最佳答案!可以再帮我做一件事吗?

假设帖子还不存在,所以我需要获取计数为零且当前日期作为时间戳的结果,如下所示:

{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);
})

编辑:解决您关于空集合的进一步问题,聚合函数将返回一个空游标,因为集合中没有要聚合的文档。因此,您需要在客户端解决此逻辑,即检查上述聚合的结果,如果结果为空数组,则根据需要创建占位符文档:

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() }];
}
});

关于node.js - 如何在 MongoDB 中通过单个查询获取计数和最大日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37486920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com