在MongoDB中按月分组文档

时间:2017-05-24 13:39:19

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

现在我有一个类似

的Mongoose查询
Collection
  .find( selector )
  .sort( sortCriteria )
  .select( selectCriteria )
  .populate( populateCriteria1 )
  .populate( populateCriteria2 )
  .then( docs => ... )
  .catch( errHandler )

所以我在查询中做了很多。

我的收藏中的每个文件都有一个日期。我希望按月和年分组返回的文档。所以它应该变成类似

的东西
docs = [
  { _id: { year: 2017, month: 4 }, docs: [ ... ] },
  { _id: { year: 2017, month: 5 }, docs: [ ... ] },
  { _id: { year: 2017, month: 6 }, docs: [ ... ] }
]

我想这是一个简单的.aggregate(),但我不知道应该在哪里添加它,因为我使用.find()进行过滤,使用.sort()进行排序,使用{{进行字段选择1}},并使用.select()填充。

每个文档都有字段.populate(),因此它可能类似于

date

1 个答案:

答案 0 :(得分:0)

不需要' $ project',因为您还可以在$group

中使用月份方法

所以你会得到类似的东西:

$group:{
    _id : { year: { $year: "$date" }, month: { $month: "$date" } },
    docs: { $push: { field1: "$field1", field2: "$field1" } }
    }}