как правильно использовать ToDate в групповом запросе

#mongodb

#mongodb

Вопрос:

Я работаю над запросом, который группирует записи за день и подсчитывает их в MongoDB, вот мой запрос

 db.getCollection('CustomerApplications').aggregate(
   [
     {
       $group:
         {
           _id: { day: { $dayOfYear: { $toDate: "$data.submittedAt" }}, year: { $year: { $toDate: "$data.submittedAt" } } },
           count: { $sum: 1 }
         }
     }
   ]
)
  

$data.submittedAt — это двойное значение, поэтому мне нужно преобразовать его в date, а затем извлечь из него $ DayOfYear
но я получаю

Нераспознанное выражение ‘$ToDate’

моя структура данных похожа

 {
    "_id" : ObjectId("5c942f50dae240feb1942b00"),
    "data" : {
        "id" : "624c0d17-b683-4c89-9d7c-011577d4e3b8",
        "email" : "i8888@eee.com",
        "name" : "ianh",
        "phoneNumber" : " 1222222",
        "score" : 12,
        "status" : "PENDING",
        "submittedAt" : 1553215312006.0,
        "surveyVersion" : "1"
    },
    "updatedAt" : ISODate("2019-03-21T00:41:52.192Z")
}
  

есть идеи, возможно ли это в MongoDB, если да, то как это правильно сделать?

Комментарии:

1. Я создал образцы данных { «_id»: ObjectId («5c9431a35af55c2d7e38fa71»), «submittedAt»: 1553215849377, «name»: «Alec»}, { «_id»: ObjectId («5c9431a35af55c2d7e38fa70»), «submittedAt»: 1553215849377, «имя»: «Джеральд» } затем я выполняю ваш запрос. работает нормально. можете ли вы предоставить содержимое пользовательских приложений?

2. $ ToDate работает у вас?

3. да, это работает. вот результат { «_id» : { «день»: 81, «год»: 2019}, «количество»: 2}

4. Я попробовал ваши образцы данных. работает нормально. Я не могу найти, почему вы получаете ошибку. где вы запускали свой запрос?

5. Я тестирую на Robo 3T, и моя версия MongoDB — v4.0.4

Ответ №1:

 $toDate New in version 4.0. Please check your version
  

Можете ли вы попробовать с этим.

 db.getCollection('CustomerApplications').aggregate(
[
 {
   $group:
     {
      _id : { $substr: ["$data.submittedAt", 0, 10] },
       count: { $sum: 1 }
     }
 }
])    
  

Возможно, это поможет вам

 $toDate - Converts a value to a date (New in version 4.0)

$dayOfMonth - Returns the day of the month for a date as a number between 1 and 31

$dayOfYear - Returns the day of the year for a date as a number between 1 and 366
  

Комментарии:

1. моя версия — v4.0.4