Mongodb - Как получить полный диапазон дат - PullRequest
0 голосов
/ 02 августа 2020

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

Это мой запрос

exports.getReport = async (req ,res) => {
    const date = new Date();
    const today = date.setDate(date.getDate());
    const yesterday = date.setDate(date.getDate() - 1);


    var end = new Date();
    end.setHours(23,59,59,999);
    const items = await Item.find({created: {$gte: yesterday, $lte: today}});
 
    res.json({items})
}

Он возвращается только сегодня, а не вчера, и я Не знаю почему.

Это записи в моей базе данных. Я жду всего 4.

{
_id: "5f26b025e881790d5df93cae",
title: "Slim Fit Mesh Polo Shirt",
standardPrice: 99,
salePrice: 69.3,
created: "2020-08-01T12:23:01.054Z",
__v: 0
},
{
_id: "5f26b025e881790d5df93caf",
title: "Cotton Quarter-Zip Sweater",
standardPrice: 160,
salePrice: 160,
created: "2020-08-01T12:23:01.402Z",
__v: 0
},
{
_id: "5f26b8d1b2a6750d93b98ed1",
title: "Slim Fit Mesh Polo Shirt",
standardPrice: 99,
salePrice: 69.3,
created: "2020-08-02T13:00:01.208Z",
__v: 0
},
{
_id: "5f26b8d1b2a6750d93b98ed2",
title: "Cotton Quarter-Zip Sweater",
standardPrice: 160,
salePrice: 160,
created: "2020-08-02T13:00:01.671Z",
__v: 0
}
]

Это то, что я получаю, только сегодняшние записи. Я также должен получать записи с 1 августа.

[
{
_id: "5f26b8d1b2a6750d93b98ed1",
title: "Slim Fit Mesh Polo Shirt",
standardPrice: 99,
salePrice: 69.3,
created: "2020-08-02T13:00:01.208Z",
__v: 0
},
{
_id: "5f26b8d1b2a6750d93b98ed2",
title: "Cotton Quarter-Zip Sweater",
standardPrice: 160,
salePrice: 160,
created: "2020-08-02T13:00:01.671Z",
__v: 0
}
]

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Формат объектов даты, хранящихся в коллекции MongoDB, находится в UT C. Предполагая, что поле created имеет тип date (не строка), следующий запрос будет извлекать четыре документа. Диапазон даты и времени охватывает вчерашние 0 часов до сегодняшних 23: 59: 59.

Обратите внимание, что дата, когда вы создаете запрос, должна быть в формате UT C, как и даты в базе данных.

const date = new Date();
const today = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59));
const yesterday = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()-1, 0, 0, 0));

collection.find( { created: { $gte: yesterday, $lte: today } } );
0 голосов
/ 02 августа 2020

Вам нужно установить 0-й час на вчерашний день после вычитания. Остальное текущее время будет считаться вчера.

Сегодня должно быть 23:59:59, чтобы включить полный день.

Вчерашний день должен начинаться с 00: 00: 00.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...