我正在将mongodb版本3.6.3
与猫鼬5.5.2
与mongoose.set('debug', true);
结合使用,以尝试查找查询所发生的情况。根据我使用find
还是aggregate
来解释日期。在这两种情况下,我的查询都使用相同的日期对象。
在此示例中,我的日期被转换回UTC:
// Query simplified
let d = new Date(incommingDates[0]);
d.setUTCHours(0, 0, 0, 0);
d = new Date(d).toISOString();
const theFilter = {transDate: { '$gte': new Date(d) }}
await Expenses.find(theFilter, '-__v').lean().exec();
// Response
Mongoose: expenses.find({ transDate: { '$gte': new Date("Wed, 07 Mar 2018 00:00:00 GMT") } }, {})
使用汇总并传递相同的日期字符串时,日期保留为ISO:
// Query simplified
let d = new Date(incommingDates[0]);
d.setUTCHours(0, 0, 0, 0);
d = new Date(d).toISOString();
const theFilter = {transDate: { '$gte': new Date(d) }}
await Expenses.aggregate([
{
$match: { ...theFilter, ...{ saleSource: 'Offline'} },
},
{
$group: {
_id: 1,
totalIncome: { $sum: 0 },
},
},
]);
// Response
expenses.aggregate([ { '$match': { transDate: { '$gte': 2018-03-07T00:00:00.000Z} } }, { '$group': { _id: 1, totalIncome: { '$sum': 0 } } } ], {})
为什么行为不同?这会导致应用程序出现问题还是会导致找到不同的记录?