MongoDB查询按日期分组

时间:2020-07-09 11:39:29

标签: node.js mongodb express mongodb-query aggregation-framework

我是MongoDB的新手,我想按分组日期查询mongoDB

数据:

{
  "name":"Samuel",
  "place":"Boston",
  "time":"2020-2-05 5:15:10"
},
{
  "name":"John Smith",
  "place":"Amsterdam",
  "time":"2017-20-4 22:10:40"
},
{
  "name":"Darek",
  "place":"Canada",
  "time":"2020-2-05 15:23:25"
},
{
  "name":"Kenio",
  "place":"Tokyo",
  "time":"2017-20-4 10:11:02"
}

我想要下面的格式:

[
   {
       "2020-2-05":[{
            "name":"Samuel",
            "place":"Boston",
            "time":"2020-2-05 5:15:10"
        },{
            "name":"Darek",
            "place":"Canada",
            "time":"2020-2-05 15:23:25"
        }]
   },
   {
        "2017-20-4":[{
            "name":"John Smith",
            "place":"Amsterdam",
            "time":"2017-20-4 22:10:40"
        },{
            "name":"Kenio",
            "place":"Tokyo",
            "time":"2017-20-4 10:11:02"
        }]
   }
]

有人可以帮助我吗,因为我没有任何想法来获取所需格式的输出。非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

只需一个简单的$group阶段并结合一些数据结构操作即可:

db.collection.aggregate([
  {
    $group: {
      _id: {
        $arrayElemAt: [
          {
            $split: [
              "$time",
              " "
            ]
          },
          0
        ]
      },
      roots: {
        $push: "$$ROOT"
      }
    }
  },
  {
    $addFields: {
      newRoot: [
        {
          k: "$_id",
          v: "$roots"
        }
      ]
    }
  },
  {
    $replaceRoot: {
      newRoot: {
        $arrayToObject: "$newRoot"
      }
    }
  }
])

我个人建议您开始将time字段存储为Date而不是字符串,这将使您的生活更加轻松。

Mongo Playground

相关问题