Мне нужно получать транзакции каждого пользователя каждые три дня. Я хочу знать пользователей, у которых нет определенной суммы (200) в течение трех дней, а затем получить сумму всех транзакций для каждого пользователя. Я хочу исключить воскресенье, так как по воскресеньям транзакций всегда мало.

Я хочу убедиться, что это делается прямо из БД, потому что транзакции от каждого пользователя могут достигать тысяч и даже миллионов.

Я использую dayjs, чтобы управлять временем, но я не понимаю

Мне удалось получить три предыдущие даты и текущую дату. Предыдущая дата будет startDate, а текущая дата будет endDate.

Но мне нужно удалить, если воскресенье находится в диапазоне, и использовать это для запроса базы данных.

Это то, что я сделал, и я не собираюсь это исправлять.

Как запросить таблицу транзакций по дате создания и исключить воскресенье?

образец схемы

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 } })
2
techstack 20 Янв 2021 в 12:05

2 ответа

Лучший ответ

Чтобы исключить воскресенье из диапазона дат, вы можете использовать оператор $ 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;}`
}  )
1
maheryhaja 20 Янв 2021 в 15:33

Вы передаете dayjs, не знаете, можете ли вы использовать его напрямую. Возможно, вам придется использовать

find({ isDeleted: false, dateCreated: { $gte: withOutSunday.toDate(), $lt: now.toDate() } })
0
Wernfried Domscheit 20 Янв 2021 в 10:40