Форматирование даты в запросе find () mongoDB / mon goose? - PullRequest
0 голосов
/ 09 апреля 2020

Моя коллекция MongoDB имеет поле ISODate, и я хочу отформатировать результат в дд / мм / гггг.

Моя модель:

const Pedido = new Schema({
    id: {
        type: String,
        required: true
    },
    cliente: {
        type: Schema.Types.ObjectId, 
        ref: 'clientes',
        required: true 
    },
    date: {
        type:Date
    }
})
mongoose.model('pedidos',Pedido)

И это запрос и рендер:

var query = await Pedido.find().populate('cliente').lean().exec()
res.render("admin/pedidos",{pedidos: query})

Я использую руль

{{#each pedidos}}
<h5 class="ordem1">Pedido #{{id}} <small>{{date}}</small></h5>
{{/each}}

Результат выглядит так:

Ср 8 апреля 2020 21: 00:00 GMT-0300 (GMT-03: 00)

но я хочу показать: 08/04/2020

Может ли кто-нибудь помочь мне с это? Спасибо !!

1 Ответ

0 голосов
/ 10 апреля 2020

мы можем использовать оператор $dateToString для форматирования даты, проверьте mongoDb Docs

, как вы можете видеть, мы можем использовать этот оператор $dateToString только в агрегированном конвейере, в $ project step

Вот простой пример в mon go детская площадка mongoplayground

в вашем примере, мы могли бы сделать тот же процесс, но вместо этого использовать $lookup из populate

запрос может быть примерно таким

Pedido.aggregate([
    {
        $match: {} // add your search here
    },
    {
        $lookup: { // this is the alternative to the populate
            from: 'clientes',
            localField: 'cliente',
            foreignField: '_id',
            as: 'clientes'
        }
    },
    {
        $project: { // add all the fields you need from the collection, if you need to omit something from the query results, just don't mention it here
            id: 1,
            clientes: 1,
            date: { $dateToString: { format: "%d/%m/%Y", date: "$date" } } // this will return the date in the format "dd/MM/yyyy"
        }
    }
])
...