Преобразование типов данных в MongoDB
У меня есть коллекция под названием Document в MongoDB. Документы в этой коллекции имеют поле с именем CreationDate, которое хранится в формате даты ISO. Моя задача - подсчитать количество документов, созданных за день, и отсортировать по числу асинхронно. Выходной формат должен быть [{_id: 'yyyy-MM-dd', cnt: x}]. Я попытался использовать структуру агрегации, как показано ниже.
db.Document.aggregate(
, {$project: {_id:1, Year:{$year:'$CreationDate'}, Month:{$month:'$CreationDate'}, Date:{$dayOfMonth:'$CreationDate'}}}
, {$group: {_id:{$concat:['$Year', '-', '$Month', '-', '$Date']}, cnt:{$sum:1}}}
, {$sort:{'cnt':-1}}
);
Код дает мне ошибку, как показано ниже:
$concat only supports strings, not NumberInt32
Я понимаю, что это потому, что $ year, $ month и $ dayOfMonth все возвращают число. Можно составить поле _id как объект и переформатировать его в желаемом формате на уровне приложения.
Но с технической точки зрения у меня есть два вопроса:
Как преобразовать число в строку в оболочке MongoDB? В этом случае выходные данные $ year можно затем преобразовать в строку и использовать в $ concat.
Есть ли лучший способ отформатировать вывод ISODate в различные форматы даты? Во многих случаях нам нужна только определенная часть ISODate, например: компонент даты или часть времени. Есть ли какие-либо встроенные операторы MongoDb для этого?
Спасибо заранее за любые советы.