如何获得具有'createdat'字段的明智和明智的文档

问题描述:

我需要生成每月和每年的报告。那么,如何获得具有“创造”领域的明智和明智的文档。如何获得具有'createdat'字段的明智和明智的文档

+0

的输出是什么格式,你期待? –

+0

在名为“orders”的集合中,我有几个包含6-7个字段的文档。这些文件中的一个字段是“createdAt”。现在通过给予年份,我应该得到当年的所有文件。以同样的方式,如果我按月查询,我应该得到那一年特定月份的所有文件。 - @DeendayalGarg –

我建议你使用aggregation framework 你需要项目的所有createdAt领域进入yearmonth领域如下:

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" 
    ] } 
} 

])