如何计算 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 中时间戳字段中的不同日期项?的主要内容,如果未能解决你的问题,请参考以下文章

计算一列中时间戳之间的持续时间

如何获得蜂巢中时间戳的平均差异

数组中时间戳之间的平均间隔

如何使用 SQL 显示两个不同区域中时间戳之间的实时差异?

hsqldb 中时间戳大小的奇怪行为

Android中时间戳的详细解释