Выбор дат (мм-дд-гггг) в этом месяце от mongodb - PullRequest
0 голосов
/ 14 января 2019

Как я могу выбрать даты из моего mongodb только для этого месяца, у меня есть date:{type:String} и мой формат: mm-dd-yyyy ex: 09-03-2019:

Вот мой маршрутизатор, чтобы получить отдельные даты, а затем считать их, но не за месяцы:

router.get('/blooddonationarea', function(req, res) {
    sess=req.session;
    Blooddonation.aggregate([{$group: {_id : "$date" , count :{$sum:1}}},{$sort: {_id: 1}}],function(err, date) {     
    res.json({ success: true, date: date });

    });       
});

дает:

[ { _id: '04-11-2019', count6: 1 },
  { _id: '05-21-2019', count6: 1 },
  { _id: '10-11-2019', count6: 3 },
  { _id: '10-22-2019', count6: 1 } ]

Мой желаемый вывод - отображать даты, например, где date = month.now(), тогда он будет показывать только месяцы только для 01-дд-гггг.

Я пробовал это:

const startOfMonth = moment().startOf('month').format('MM-DD-YYYY')
const endOfMonth = moment().endOf('month').format('MM-DD-YYYY')

        Blooddonation.aggregate([
        { "$match": {
            "date": { "$gte": startOfMonth, "$lte": endOfMonth }
        }},
        { "$group": { "_id": "$date", "count": { "$sum": 1 } } },
        { "$sort": { "_id": 1 } }],function(err, date) {     
            res.json({ success: true, date: date });
            console.log("dates are" + date);
        });              
    });

1 Ответ

0 голосов
/ 14 января 2019

Вы можете использовать библиотеку moment, чтобы получить нужный формат, а затем использовать операторы $gte и $lte, чтобы получить данные только за текущий месяц

const moment = require('moment')

const startOfMonth = moment().startOf('month').format('MM-DD-YYYY')
const endOfMonth = moment().endOf('month').format('MM-DD-YYYY')

Blooddonation.aggregate([
  { "$match": {
    "date": { "$gte": startOfMonth, "$lte": endOfMonth }
  }}
  { "$group": { "_id": "$date", "count": { "$sum": 1 } } },
  { "$sort": { "_id": 1 } }
])
...