Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongoose-用于筛选的聚合和分组日期_Mongodb_Date_Mongoose_Aggregation - Fatal编程技术网

Mongodb Mongoose-用于筛选的聚合和分组日期

Mongodb Mongoose-用于筛选的聚合和分组日期,mongodb,date,mongoose,aggregation,Mongodb,Date,Mongoose,Aggregation,我对mongoose上的数据聚合有一些问题。如果你能帮忙,我将不胜感激 这是我的数据库(最小化): 以下是我的目标结构: [ [2018,5], [2019,10], [2019,12], [2020,1], [2020,2], [2020,9] ] 目前我的代码是: Model.aggregate([ { $group: { _id: "$year", months: { $

我对mongoose上的数据聚合有一些问题。如果你能帮忙,我将不胜感激

这是我的数据库(最小化):

以下是我的目标结构:

   [
      [2018,5],
      [2019,10],
      [2019,12],
      [2020,1],
      [2020,2],
      [2020,9]
    ]
目前我的代码是:

  Model.aggregate([
    { $group: { _id: "$year", months: { $addToSet: "$month" } } }
  ]);

db.collection.aggregate([
          { $group: { _id: { year: { $year: "$timestamp" }, month: { $month: "$timestamp" } }, total: { $sum: 1 } } },
          { $sort: { "_id.year": -1, "_id.month": -1 } },
  
])
但我觉得我离我想要达到的目标还很远。 如果您能提供一些见解,我将不胜感激,谢谢大家

5小时后我成功了。 解决方案:

db.collection.aggregate([
          { $group: { _id: { year: { $year: "$timestamp" }, month: { $month: "$timestamp" } }, total: { $sum: 1 } } },
          { $sort: { "_id.year": -1, "_id.month": -1 } },
  
])

这是你需要的吗@Rfroes87不完全正确。请注意,当您添加新文档时,它们也是如何添加的。我需要唯一的年+月。想象一下,一个博客存在了几年,我想展示一个列表,上面列出了所有写文章的月份。5个小时后,我独自想出了一个解决方案,很快就给出了答案。你不需要
$unwind
(它用于数组)。您可以将排序用作聚合管道的第二阶段:
{$sort:{“\u id.year”:-1,“\u id.month”:-1}
。而且,你不需要第三和第四阶段。@prasad_uu你说得对,我会更新答案。谢谢你!它在那里是因为我最初想得到一个不同的数据结构响应,但我放弃了。