Мне нравится другой ответ здесь, и в основном для использования математики даты вместо операторов даты агрегации, которые, хотя полезно, также могут быть немного неясными.
Единственное, что я хочу добавить здесь, это то, что вы также можете вернуть объект Date
из структуры агрегации таким подходом, в отличие от «числовой» метки времени. Это лишь небольшая дополнительная математика на тех же принципах, используя $add
:
db.collection.aggregate([
{ "$group": {
"_id": {
"$add": [
{ "$subtract": [
{ "$subtract": [ "$current_date", new Date(0) ] },
{ "$mod": [
{ "$subtract": [ "$current_date", new Date(0) ] },
1000 * 60 * 15
]}
] },
new Date(0)
]
},
"count": { "$sum": 1 }
}}
])
Контексты Date(0)
в JavaScript здесь представляют ту же самую «эпоху» в более короткая форма, так как 0 миллисекунд от эпохи - эпоха. Но главное, что когда «добавление» к другому объекту даты BSON выполняется с числовым идентификатором, тогда обратное к описанному условию истинно, и конечный результат на самом деле теперь является Date
.
Все драйверы вернут родной тип Date
на свой язык с помощью этого подхода.
Это странный запрос, поскольку .CSV не является уровнем представления. Отформатированные значения обычно не хранятся в .CSV, но я полагаю, что нет никаких причин, по которым они не могут быть.
Должен помочь метод Руби center
.
"hello".center(20) #=> " hello "
Тогда просто поместите центрированное значение в вас .CSV.
Я думаю, что это невозможно, поскольку CSV - это просто файл, разделенный запятыми, и не содержащий никаких данных о стилях. Кроме того, вы можете добавить пустой столбец (столбцы), чтобы имитировать это поведение.