首页 > 解决方案 > 如何从 mongodb 查询的日期范围中排除星期日?

问题描述

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

我想确保这是从数据库中直接完成的,因为每个用户的交易可能会达到数千甚至数百万。

我正在使用 dayjs 来操纵时间,但我做得不对

我已经能够获得前三个日期和当前日期。前一个日期是 startDate,当前日期是 endDate。

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

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

如何按 dateCreated 查询事务表并排除星期日?

模式示例

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 } })

标签: javascriptmongodbdatemongoosedayjs

解决方案


要从日期范围中排除星期日,您可以使用$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;}`
}  )

推荐阅读