【问题标题】:MongoDB query to group by dateMongoDB查询按日期分组
【发布时间】:2020-07-09 11:39:29
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 非常感谢 Tom Slabbaert。有效。是的,下次我会确保将时间戳字段存储为日期而不是字符串。
    猜你喜欢
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2019-04-03
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    相关资源
    最近更新 更多