当我从Mongo shell运行以下查询时,它运行正常:
db.reports.find({
dateTime: {
$gte: "2018-06-12T05:00:00.000Z",
$lte: "2018-06-15T05:00:00.000Z",
}
}
给出结果:
{
"_id" : "5b3eaf388213fa2f5026ed26",
"report_id" : "1",
"description": "test description 1",
"address" : "300-BLK Hilliard Ave",
dateTime" : "2018-06-13T04:00:00.000Z"
},
{
"_id" : "5b3eaf388213fa2f5026ed27",
"report_id" : "2",
"description": "test description 2",
"address" : "1600-BLK Patton Ave",
dateTime" : "2018-06-13T04:00:00.000Z"
},
{
"_id" : "5b3eaf388213fa2f5026ed28",
"report_id" : "3",
"description": "test description 3",
"address" : " ",
dateTime" : "2018-06-14T04:00:00.000Z"
}
但是当我尝试在Node脚本中执行它时,它返回一个空数组:
reportModel.find({
dateTime: {
$gte: "2018-06-12T05:00:00.000Z",
$lte: "2018-06-15T05:00:00.000Z",
}, (err, reports) => {
if (err) {
reject(err)
}
resolve(reports)
}
我知道它正在连接到数据库,因为我在其他属性上运行的查询都返回了期望值。
我的report
模型是:
const report = new mongoose.Schema({
report_id: { type: String, default: '' }
description: { type: String, default: '' }
address: { type: String, default: '' }
dateTime: { type: Date, default: Date.now }
})
我尝试了new Date()
和new ISODate()
的各种包装,如此处的各种答案所建议,无济于事。知道有什么问题吗?
答案 0 :(得分:1)
Mongoose模式中的数据类型需要与已保存文档中的数据类型匹配。因此,因为查询在外壳中起作用,所以您的dateTime
字段必须是文档中的字符串,并且架构定义应类似于:
const report = new mongoose.Schema({
report_id: { type: String, default: '' }
description: { type: String, default: '' }
address: { type: String, default: '' }
dateTime: { type: String, default: Date.now }
})
但是,您可能需要考虑将dateTime
的值存储为Date
,以提高效率和灵活性。