我在mongoose中进行以下查询:
Schedule.find({
'operative.from': { $lte: '2015-09-07T00:00:25+00:00' },
'operative.to': { $gte: '2015-09-07T23:59:25+00:00' },
'operative.weekdays': { $in: [ 1 ] } })
.exec()
.then(function () { … })
它不返回任何结果。令我困惑的是,如果我在Mongo Shell上运行完全相同的查询,它会按预期返回约200个结果。
我已经尝试删除条件,直到它返回一些结果,并且令人困惑的是mongoose是两个日期查询。
这些字段的相关架构如下:
operative: {
from: Date,
to: Date,
// weekdayds the flight is operated, Sunday = 0
weekdays: []
}
我还确保没有日期条件的查询会返回预期的结果,而且确实如此。可能导致这种情况的任何想法?
答案 0 :(得分:0)
好的问题不在于查询本身,而在于架构:
在另一个与查询无关的字段中,我按如下方式指定路径:
aircraft: {
type: String,
owner: String
}
使用保留密钥type
导致验证错误。出于性能原因,我在文档中填充了跳过mongoose验证的集合,因此这个问题没有引起注意。
将aircraft.type
路径更改为type: { type: String }
后,文档验证成功并且查询正确完成。
我还在Mongoose存储库上报告了验证错误可能会无声地使您的查询失败的事实,这是不可接受的。
修改强>
正如维护者指出的那样,这是Mongoose的设计。使用strict option可以抛出相应的错误
答案 1 :(得分:-1)
您正在向查询传递两个字符串,其中mongoose需要js Date对象。当您使用new Date('2015-08-12T00:00:25')