我在MongoDB中有一些数据,我想比较存储在其中的两个日期之间的日期。 问题是当我在查询中使用$ 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(猫鼬)中比较这些日期?
答案 0 :(得分:1)
使用
new Date().toISOString()
代替
new Date()
尝试:
let currentDate = new Date().toISOString();
Setting.findOne(
{
"advertisment.active": true,
"advertisment.fromdate": { $gte: currentDate },
"advertisment.todate": { $lte: currentDate },
},
'advertisment')
.then(data =>
{
console.log(data);
})
.catch(err => console.log(err))
答案 1 :(得分:1)
您可以轻松检查mongo默认保存的类型。转到mongo shell,然后输入Date()
。实际上,它是nodejs中的new Date().toString()
。如果输入new Date()
,则将获得ISO日期字符串。同样,Date.now()
会给出时间戳。
Date.now()
始终以纪元秒(UNIX时间)给出 present 时间戳,无论传递给它的参数如何。类型不匹配会导致使用比较运算符时失败。
根据要存储的类型,尝试使用new Date().toISOString()
或new Date().toString()
或Date.now()
。您提供的示例数据看起来像是ISO日期字符串。