如何获得年度明智和月份明智的文件,这些文件正在创造中。领域

时间:2016-04-28 06:37:14

标签: mongodb

我需要生成月度和年度报告。因此,如何获得年度明智和月份明智的文件,这些文件正在创造中。字段。

3 个答案:

答案 0 :(得分:1)

我建议您使用aggregation framework 您需要将所有createdAt字段投放到yearmonth字段中,如下所示:

db.collection.aggregate([{
    $project: {
        year: {
            $year: "$createdat"
        },
        month: {
            $month: "$createdat"
        },
        log_field: 1,
        other_field: 1,
    }
}, {
    $match: {
        "year": 2016
    }
}]);

有关$project

的更多详情

答案 1 :(得分:0)

我意识到您可能无法更改所拥有数据的结构,但如果这样做,这可能对您有用......

我在我们的项目中做了很多这样的事情,并且总是发现最好(最简单,最快)的方式是分别预先存储这类信息。
举个例子,我存储了完整的日期时间字段(就像你一样),但是然后将YYYYMM值存储在它自己的字段以及Day中。这些值/格式可能会有所不同,具体取决于数据类型,但我已经取得了很大的成功。

(对于上下文,我存储的是财务计算数据,每个客户每月最多可记录数百万条记录.....并非聚合框架管理得很好)
一小部分BSON样本

.... 
"cd" : ISODate("2016-02-29T22:59:59.999Z"),
"cdym" : "201602",
"cdd" : "29",
....

答案 2 :(得分:-1)

我得到了答案,这就是答案。

db.mycollection.aggregate([
{ "$redact": { 
    "$cond": [ 
        { "$and": [ 
            { "$eq": [ { "$year": "$date" }, 2016 ] }, 
            { "$eq": [ { "$month": "$date" }, 5 ] }
        ] }, 
        "$$KEEP", 
        "$$PRUNE" 
     ] } 
}

])