如何获得具有'createdat'字段的明智和明智的文档
答
我建议你使用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
答
细节我知道你可能无法改变你的数据结构,但如果你这样做,这可能对你有用......
我做得很好在我们的项目中有很多这样的事情,并且总是发现最好的(如最简单和最快的)方式是事先将这种信息分开存储。例如,我存储完整的日期时间字段(与您一样),但,然后将YYYYMM值存储在其自己的字段以及Day中。这些值/格式可能会因数据类型而有所不同,但我已经取得了非常好的成功。
(对于背景下,我存储的财务数据计算,随地高达数百万条记录,每月,每个客户.....不是聚合框架已经很好地管理)
的BSON
....
"cd" : ISODate("2016-02-29T22:59:59.999Z"),
"cdym" : "201602",
"cdd" : "29",
....
答
我得到了答案,这就是答案。
db.mycollection.aggregate([
{ "$redact": {
"$cond": [
{ "$and": [
{ "$eq": [ { "$year": "$date" }, 2016 ] },
{ "$eq": [ { "$month": "$date" }, 5 ] }
] },
"$$KEEP",
"$$PRUNE"
] }
}
])
的输出是什么格式,你期待? –
在名为“orders”的集合中,我有几个包含6-7个字段的文档。这些文件中的一个字段是“createdAt”。现在通过给予年份,我应该得到当年的所有文件。以同样的方式,如果我按月查询,我应该得到那一年特定月份的所有文件。 - @DeendayalGarg –