Necesito obtener las transacciones de cada usuario cada tres días. Quiero conocer a los usuarios que no tienen hasta una cierta cantidad (200) dentro del período de tres días, luego obtener la suma de todas las transacciones de cada usuario. Quiero excluir el domingo ya que las transacciones siempre son bajas los domingos.
Quiero asegurarme de que esto se haga directamente desde la base de datos porque las transacciones de cada usuario pueden ascender a miles, incluso millones.
Estoy usando dayjs para manipular el tiempo pero no lo estoy haciendo bien
He podido obtener las tres fechas anteriores y la fecha actual. La fecha anterior será startDate y la fecha actual será endDate.
Pero necesito eliminar si el domingo está en el rango y usarlo para consultar la base de datos.
Esto es lo que he hecho, lo que no estoy cerca de arreglarlo.
¿Cómo puedo consultar la tabla de transacciones por fecha de creación y excluir los domingos?
muestra de esquema
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 }, })método
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 } })Para excluir los domingos del rango de fechas, puede usar el operador $where como este:
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 un día, no sabes si puedes usarlo directamente. Tal vez tengas que usar
find({ isDeleted: false, dateCreated: { $gte: withOutSunday.toDate(), $lt: now.toDate() } })