如何计算Mongoose / NodeJS中时间戳字段中的不同日期项?

时间:2014-05-09 11:19:00

标签: node.js mongodb mongoose mongodb-query aggregation-framework

我在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

编辑:理想情况下,我想获得每个不同日期的记录数。

1 个答案:

答案 0 :(得分:2)

你想要的是聚合框架与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