如何从 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() } })
我需要每三天获取每个用户的交易记录。我想知道三天内没有达到一定数量(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() } })