如何计算 Mongoose/NodeJS 中时间戳字段中的不同日期项?
Posted
技术标签:
【中文标题】如何计算 Mongoose/NodeJS 中时间戳字段中的不同日期项?【英文标题】:How to count distinct date items in a timestamp field in Mongoose/NodeJS? 【发布时间】:2014-06-27 02:46:22 【问题描述】:我在我的 NodeJS 中使用 Mongoose,我有一个包含如下文档的集合 -
var SomeSchema = new Schema(
date:
type: Date,
default: new Date()
,
some_item:
type: String
);
date
字段包含日期和时间部分(例如,2014-05-09 09:43:02.478Z
)。如何获取给定日期的不同项计数,例如2014-05-08
?
编辑:理想情况下,我想获取每个不同日期的记录数。
【问题讨论】:
根据猫鼬文档。 Model.distinct(字段、条件、回调); 我的条件是什么? 区分不是一个好主意。它只是 mapReduce 的一个包装器,因此运行速度比聚合框架替代方案慢很多。 【参考方案1】:您想要的是使用带有aggregate()
命令的聚合框架,至少可以按照您的要求找到一个日期:
SomeSchema.aggregate(
[
"$match":
"date":
"$gte": new Date("2014-05-08"), "$lt": new Date("2014-05-09")
,
"$group":
"_id": "$some_item",
"count": "$sum": 1
],
function(err,result)
// do something with result
);
如果您专门寻找多个日期的“计数”,那么您可以执行以下操作:
SomeSchema.aggregate(
[
"$match":
"date":
"$gte": new Date("2014-05-01"), "$lt": new Date("2014-06-01")
,
"$group":
"_id":
"year": "$year": "$date" ,
"month": "$month": "$date" ,
"day": "$dayOfMonth": "$date"
"count": "$sum": 1
],
function(err,result)
// do something with result
);
这为您提供了“每天”分组。如果您想进一步了解,请在文档中查找 date aggregation operators。
【讨论】:
太棒了。我也可以为所有独特的日期执行此操作吗?还是我必须在循环中选择每个日期,然后计算该日期的不同记录? 好答案。尼尔,您在第二个示例中忘记了您的_id
定义。
@JohnnyHK 谢谢,再次谢谢。你怎么还不是版主?
@GPX 我认为那里有一个编辑显示如何找到单个日期边界并按它们分组以上是关于如何计算 Mongoose/NodeJS 中时间戳字段中的不同日期项?的主要内容,如果未能解决你的问题,请参考以下文章