Запрос MongoDB для группировки по дате - PullRequest
1 голос
/ 09 июля 2020

Я новичок в 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 Ответ

1 голос
/ 09 июля 2020

Простой этап $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 и не как струна, это сделает вашу жизнь намного проще в будущем.

Пн go Детская площадка

...