如何从 mongodb 查询的日期范围中排除星期日?

How to exclude Sundays from date range in mongodb query?

我需要每三天获取每个用户的交易记录。我想知道三天内没有达到一定数量(200)的用户,然后获取每个用户的所有交易总和。我想排除周日,因为周日的交易量总是很低。

我想确保这是从数据库中完成的,因为来自每个用户的交易可以 运行 达到数千甚至数百万。

我正在使用 dayjs 来操纵时间,但是我没有弄对

我已经能够得到前三个日期和当前日期。之前的日期为开始日期,当前日期为结束日期。

但是如果星期天在范围内,我需要删除并使用它来查询数据库。

这就是我所做的,我还没有接近修复它。

如何按创建日期查询交易 table 并排除星期日?

架构示例

export const TransactionSchema = new mongoose.Schema({
    description: {
        type: String
    },
    ref: {
        type: String,
        required: true
    },
    userID: {
        type: mongoose.SchemaTypes.ObjectId,
        ref: 'User'
    },
   
    amount: {
        type: Number,
        required: true,
    },
   
    commission: {
        type: Number,
        default: 0
    },

    responseDescription: {
        type: String
    },
    authCode: {
        type: Number
    },
    isDeleted: {
        type: Boolean,
        default: false
    },
    dateCreated: {
        type: Date,
        default: Date.now
    },
    dateUpdated: {
        type: Date,
        required: false
    },
    openingBalance: {
        type: Number
    },
    closingBalance: {
        type: Number
    },
  
   
})

方法

   async getUserRequiredTargetTrans() {
        let now = dayjs();//endDate
        let fromThreeDays = now.subtract('2', 'day')
        let sunday = now.day(0)

        let withOutSunday = now.diff(fromThreeDays);//startDate

        const response = await this.transactionModel.find({ isDeleted: false, dateCreated: { $gte: withOutSunday, $lt: now } })

要从日期范围中排除星期日,您可以像这样使用 $where 运算符:

 async getUserRequiredTargetTrans() {
    let from = dayjs();//endDate
    let fromThreeDays = now.subtract('2', 'day')
    const response = await this.transactionModel.find({ isDeleted: false, dateCreated: { $gte: fromThreeDays, $lt: now }, 

    // exculde sunday
     $where: `function() { return this.dateCreated.getDay() !== 0;}`
}  )

你传一个dayjs,不知道能不能直接用。也许你必须使用

find({ isDeleted: false, dateCreated: { $gte: withOutSunday.toDate(), $lt: now.toDate() } })