我需要生成月度和年度报告。因此,如何获得年度明智和月份明智的文件,这些文件正在创造中。字段。
答案 0 :(得分:1)
我建议您使用aggregation framework
您需要将所有createdAt
字段投放到year
和month
字段中,如下所示:
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"
] }
}
])