javascript - 如何从 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 } })
解决方案
要从日期范围中排除星期日,您可以使用$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;}`
} )
推荐阅读
- parse-server - 如何在解析服务器中确定用户最后一次 API 请求的时间戳?
- mongodb - findOneAndUpdate 是否以原子方式执行更新?(因为 findAndModify 在 Java MongoDB 异步驱动程序中不可用)
- python - 为 PySpark 数据帧中的特定单元格赋值
- mysql - 我正在尝试在 MySQL 中执行以下行并不断收到 1136 错误
- android - libtensorflow_demo.so 未找到,无法跟踪
- reporting-services - 表达式引用了参数集合中不存在的参数。(rsRuntimeErrorInExpression)
- java - JTA 事务超时故障排除
- nginx - Kubernetes - 如何使用 NodePort 服务从集群外部访问 nginx 负载平衡
- javascript - API 调用的 Redux 操作不正确
- html - 3 Column Layout-尝试在css框架之前掌握plain layout