在mongo中工作的查询在mongoose中不起作用

时间:2015-09-07 05:30:58

标签: mongoose

我在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: []
 }

我还确保没有日期条件的查询会返回预期的结果,而且确实如此。可能导致这种情况的任何想法?

2 个答案:

答案 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')

时,它会起作用