为什么日期查询会有所不同,具体取决于是否使用具有匹配项的查找与聚合(iso转换为UTC)?

时间:2019-04-16 16:46:26

标签: mongodb date mongoose

我正在将mongodb版本3.6.3与猫鼬5.5.2mongoose.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 } } } ], {})

为什么行为不同?这会导致应用程序出现问题还是会导致找到不同的记录?

0 个答案:

没有答案