查询,在蒙戈工作不猫鼬

问题描述:

工作我做下面的查询中猫鼬:查询,在蒙戈工作不猫鼬

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个结果。

我试过去除条件,直到它返回了一些结果,什么是混淆猫鼬是两个日期查询。

相关架构这些领域是:

operative: { 
    from: Date, 
    to: Date, 

    // weekdayds the flight is operated, Sunday = 0 
    weekdays: [] 
} 

我也保证不注日期的条件查询返回预期的结果,和他们做。任何想法可能会导致这种情况?

+0

你有没有尝试_new Date()_在你的日期? –

好这个问题是不是与查询本身,而是使用模式,将工作

aircraft: { 
    type: String, 
    owner: String 
} 

使用保留键type导致验证错误。出于性能原因,我在文档中填充了跳过猫鼬验证的集合,所以这个问题没有被注意到。

aircraft.type路径更改为type: { type: String }后,文档验证成功,查询正确执行。

我也报道过Mongoose存储库,验证错误可以默默无法使您的查询失败,这是不可接受的。

编辑:

由于维护者向我指出的那样,这是由猫鼬的设计。使用strict option有适当的错误抛出

您正在将两个字符串传递给您的查询,其中mongoose需要js Date对象。

在另一个领域,查询不相关的,我被指定如下路径:当您使用new Date('2015-08-12T00:00:25')

+0

这是不正确的。 Mongoose期望vlid Date objet或任何可以转换为有效的Date对象的数据,例如Array或ISO String。 – Alberto

+0

好吧,我在生产中有几个大型猫鼬应用程序,它们都处理日期查询的加载,并且它们与日期查询一起工作得很好。你试过了吗?我只是认为最好是进行明确的转换,然后依靠一些隐含的代码... – Reto

+0

这两种方法都没有错。你的方式非常明确,但我依靠一个坚实的标准(ISO-8601)。两者都可以按照预期的方式工作(这不是我的问题的根源,请参阅我自己的答案以获取详细信息)。另一方面,有趣的是,看看两者之间是否存在性能差异,我想这取决于Mongoose如何处理查询 – Alberto