получение документа из драйвера mongodb- nodejs с использованием дат - PullRequest
1 голос
/ 22 января 2020

Привет, я пытаюсь получить документы из mongodb специально для D-7-го дня.
Пример: Если сегодня " Среда ", то я хочу получить документы последней " Среда"only

Я получаю дату из внешнего интерфейса,
Формат даты в mongodb: 2020-01-15T09:02:48.375+00:00
Формат даты от почтальона:" 2020-01-15 ", которым я являюсь преобразование в nodejs в dateObject .a после утешения dateObject Dates выглядит следующим образом: 2020-01-15T00: 00: 00.000Z

nodejs query

const { previousDay,vendorId } = req.body;
      console.log(previousDay);
      let date = new Date(previousDay);
      console.log(date);
     const vendorOrder = await Order.find(
          {orderCreatedBy: vendorId,orderCreatedOn: date});
     return res.status(200).json({
         vendorOrder
        });
      } catch (error) {
        res.send(error);
      }
    };

POSTMAN Req.body

{ "previousDay":"2020-01-15"}

POSTMAN Response возвращает пустой массив

[]

Коллекция Mongodb

_id:5e26be38c13b7149d0a95111
isApproved:false
vendorOrder:[]
frequency:"WE"
orderCreatedBy:5e25550a3405363bc4bf86c1
submittedTo:5e2555363405363bc4bf86c2
dealerOrder:[]
orderCreatedOn:2020-01-15T09:02:48.375+00:00
__v:0

Ответы [ 3 ]

1 голос
/ 22 января 2020

MongoDB Схема:

orderCreatedOn: {
      type: Date,
      default: new Date().toISOString().split("T")[0] + "T18:30:00.000Z"
    },

Nodejs Контроллер: см. @ Pushprajsinh Chudasama ответ

1 голос
/ 22 января 2020

Теперь существует проблема с сопоставлением даты, поскольку mongodb будет соответствовать полной дате, включая метку времени, поэтому во время сохранения документа установите метку постоянного времени вместе с датой.

Давайте разберемся на примере ..
Когда вы сохраняете документ, в это время установите значение orderCreatedOn, как показано ниже, Отредактировано

exports.createOrder = async (req, res, next) => { 
    req.body['orderCreatedOn'] = new Date().toISOString().split("T")[0] + "T18:30:00.000Z";
    const order = new Order({ ...req.body, }); 
    try { 
        await order.save(); 
        res.status(201).json({ message: "Order created successfully!", order: order, orderId: order._id }); 
    } 
    catch (e) { 
        res.send(e); 
    } 
};

В результате ваша дата в базе данных будет сохранена как 2020-01-15T18:30:00.000Z

Так что теперь, когда вы найдете дату до 7 дней, добавьте приведенный ниже фрагмент в свой контроллер поиска.

    var someDate = new Date();
    var numberOfDaysToSubtract = -7; //this refers to date of seven days before
    someDate.setDate(someDate.getDate() + numberOfDaysToSubtract);
    console.log("Date of seven days before ===>" , someDate);
    var date = someDate.toISOString().split("T")[0] + "T18:30:00.000Z";
    date = new Date(date);
    //And the rest code is same. 
    console.log(" =======+++> ", new Date(date));

Надеюсь, вы получили решение.

0 голосов
/ 22 января 2020

Один из способов сделать это - создать диапазон дат из входящего запроса D-7 <= orderCreatedOn < D-6.

В контроллере:

const { previousDay, vendorId } = req.body;
console.log(previousDay);
let incomingDate = new Date(previousDay); //2020-01-15
//incomingDate.setHours(0, 0, 0, 0);

const lowerBound = new Date(
  incomingDate.setDate(incomingDate.getDate() - 7)
);
const upperBound = new Date(
  incomingDate.setDate(incomingDate.getDate() + 1)
);

const vendorOrder = await Order.find({
  orderCreatedBy: vendorId,
  orderCreatedOn: { $gte: lowerBound, $lt: upperBound }
});
return res.status(200).json({
  vendorOrder
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...