【发布时间】:2019-06-29 07:46:51
【问题描述】:
我在 MongoDB 中有一些数据,我想比较存储在其中的日期在 2 个日期之间。 问题是当我在查询中使用 $gte 或 $lte 时它总是返回 null。
架构:
const SettingSchema = new Schema({
advertisment: [
{
name: {
type: String,
required: true
}
,
fromdate: {
type: Date,
default: Date.now()
}
,
todate: {
type: Date
}
,
active:{
type:Boolean
}
}
]});
样本数据:
{
"advertisment": [
{
"fromdate": "2010-06-29T06:53:32.643Z",
"_id": "5d170b634ebf4d1848efbe9a",
"name": "ads1",
"todate": "2030-06-29T09:38:32.643Z",
"active": true
},
{
"fromdate": "2010-06-29T06:53:32.643Z",
"_id": "5d170baae38bc832c4d89d9a",
"name": "ads2",
"todate": "2030-06-29T09:38:32.643Z",
"active": true
}
]
}
查询:
let currentDate = new Date();
Setting.findOne(
{
"advertisment.active": true,
"advertisment.fromdate": { $gte: currentDate },
"advertisment.todate": { $lte: currentDate },
},
'advertisment')
.then(data =>
{
console.log(data);
})
.catch(err => console.log(err))
如何在 MongoDB (mongoose) 中比较这些日期?
【问题讨论】:
-
在架构中,对于 fromdate 和 todate 字段,使用类型作为字符串而不是日期。在存储和查询 fromdate 和/或 todate 时,使用 new Date().toJSON() 生成日期字符串。完成此操作后,您现有的查询将正常工作。
-
如果您不想接受上述响应,您可以做的另一件事是将当前日期声明为 let currentDate = new Date().toDateString();这次比较应该返回正确的响应