let params = JSON.parse(req.query.params);
let dateFrom = params.dateFrom;
let dateTo = params.dateTo;
dateFrom = dateFrom.replace(/T/g, ' '); //parse the data to the format accepted by mongodb
dateFrom = dateFrom.replace(/Z/g, ' ');
dateTo = dateTo.replace(/T/g, ' ');
dateTo = dateTo.replace(/Z/g, ' ');
productSchema.aggregate([
{
$match: {
productExist: true,
}
},
{
$match: {
productTimeStamp: {
$gte: dateTo,
$lte: dateFrom
}
}
},
{
$lookup:
{
from: 'supplierschemas',
localField: 'supplierId',
foreignField: '_id',
as: 'supplier'
}
},
{
$lookup:
{
from: 'brandschemas',
localField: 'brandId',
foreignField: '_id',
as: 'brand'
}
},
{
$lookup:
{
from: 'categoryschemas',
localField: 'categoryId',
foreignField: '_id',
as: 'category'
}
})]
我有上面的查询,它使用 express 从 mongodb 获取数据。我想选择中间的 2 个日期。但是当我添加这些代码行时,上面的代码不起作用:
{
$match: {
productTimeStamp: {
$gte: dateTo,
$lte: dateFrom
}
}
},
我如何准确地添加这些语句来获取 2 个日期的数据?
最佳答案
MongoDB 默认日期是 ISODate
。不要对日期进行 replace
操作。
而是将它们作为新日期传递:
let params = JSON.parse(req.query.params);
productSchema.aggregate([{
$match: {
productExist: true,
}
},
{
$match: {
productTimeStamp: {
$gte: new Date(params.dateFrom),
$lte: new Date(params.dateTo)
}
}
},
{
$lookup: {
from: 'supplierschemas',
localField: 'supplierId',
foreignField: '_id',
as: 'supplier'
}
},
{
$lookup: {
from: 'brandschemas',
localField: 'brandId',
foreignField: '_id',
as: 'brand'
}
},
{
$lookup: {
from: 'categoryschemas',
localField: 'categoryId',
foreignField: '_id',
as: 'category'
}
})]
关于mongodb聚合以获取2个日期之间的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52911721/