我尝试创建一个查询来搜索两个日期字符串之间的所有集合,但是我所有的尝试都失败了,每次尝试查询时它总是不返回任何结果
这是我使用的查询:
const intialDate = new Date('2024-05-23T06:00:00.000Z');
const endDate = new Date('2024-05-24T20:44:02.172Z');
const dispoquery = this.guestModel.find({
$and: [
{
$or:[
{
initial: {
$gte: intialDate
}
},
{
end: {
$lte: endDate
}
},
]
}
]
}).catch((err) => {
return err;
})
.then((doc:any)=> {
return doc
})
我需要符合此分类的所有文件:
intial >= intialDate || end <= endDate
但我总是没有结果 这是我收集的样本数据:
{
"folio": "W1013",
"nombre": "CArlos",
"llegada": "2024-05-23T06:00:00.000Z",
"salida": "2024-05-24T19:52:11.050Z",
"__v": 0
}
有人可以告诉我我做错了什么吗?
您的数据和查询存在一些问题:
您的查询有单词
initial
和end
,但您的数据库文档有llegada
和salida
。
您的文档的日期为字符串,而不是日期对象。并且您正在与日期对象进行比较,而不是字符串。
llegada
将 salida
和
$dateFromString
转换为日期。$dateFromString
进行转换如果其中只有一个
$and
子句,则无需使用 $or
。
$expr
进行比较/检查。
db.guestModel.find({
$expr: {
$or: [
{
$gte: [
{ $dateFromString: { dateString: "$llegada" } },
new Date("2024-05-23T06:00:00.000Z")
]
},
{
$lte: [
{ $dateFromString: { dateString: "$salida" } },
new Date("2024-05-24T20:44:02.172Z")
]
}
]
}
})