MongoDB/Mongoose中嵌套架构中的日期查询返回的结果超出范围

MongoDB/Mongoose中嵌套架构中的日期查询返回的结果超出范围,mongodb,mongoose,Mongodb,Mongoose,我在一个查询中遇到了这个奇怪的结果: 我的模式: var taskSchema = new mongoose.Schema({ name: String, done: Boolean, dueDate: Date, info: String }); var eventSchema = new mongoose.Schema({ tasks: [ taskSchema ], }, { usePushEach: true }); 我在机器人

我在一个查询中遇到了这个奇怪的结果:

我的模式:

var taskSchema = new mongoose.Schema({
    name: String,
    done: Boolean,
    dueDate: Date,
    info: String
});

var eventSchema = new mongoose.Schema({
        tasks:     [ taskSchema ],
}, { usePushEach: true });
我在机器人3T中的查询:

db.getCollection('events').find({ 'tasks.dueDate': 
    {
        $gte: new ISODate('2018-04-01T00:00:00'),
        $lte: new ISODate('2018-05-01T00:00:00')
    }
}, { 'tasks.$': 1, _id: 1 }
)

其结果是:

 /* 1 */
{
    "_id" : ObjectId("59fabc5ec85c3400123cdf5b"),
    "tasks" : [ 
        {
            "name" : "Comprar champagne",
            "dueDate" : ISODate("2019-01-31T06:00:00.000Z"),
            "_id" : ObjectId("5a723e868dba4f0014c0c556"),
            "done" : true
        }
    ]
}

/* 2 */
{
    "_id" : ObjectId("5a1c99ccba7cc60014c99945"),
    "tasks" : [ 
        {
            "name" : "Prova do vestido",
            "dueDate" : ISODate("2018-05-10T03:00:00.000Z"),
            "_id" : ObjectId("5a7336d5b882bc0014daeba9"),
            "done" : false
        }
    ]
}
如您所见,这将返回一个2019年task.dueDate的文档,超出查询范围。 为什么会这样

MongoDB版本3.6.3

提前谢谢! 谢谢你的时间

尝试此查询:

db.events.find(
 {tasks:{$elemMatch:{$and:[{dueDate:{$lte: new Date('2018-05-01T00:00:00')}}, 
 {dueDate:{$gte: new Date('2018-04-01T00:00:00')}}]} }     
 }, { 'tasks.$': 1, _id: 1 }
)
输出为:

{
"_id" : ObjectId("5a1c99ccba7cc60014c99945"),
"tasks" : [ 
    {
        "name" : "Degustaçao buffet",
        "dueDate" : ISODate("2018-04-02T03:00:00.000Z"),
        "_id" : ObjectId("5a7337abb882bc0014daebaa"),
        "done" : false
    }
  ]
}

我已经添加了您的上述数据集,并运行了您的查询,结果为0:1)2)实际上这不是全部文档,我希望在这里更好地显示。在这里您可以看到所有返回的文档:检查答案中的查询,让我知道这对您有用。非常感谢!这样做效果更好,但我需要查找日期范围内的任何数组文档(示例中的任务)。我有这个文档:在这个范围内有两个任务:db.events.find({tasks:{$elemMatch:{$和:[{dueDate:{$lte:new Date('2018-06-01T00:00:00')}},{dueDate:{$gte:new Date('2018-04-01T00:00:00')}}}},{'tasks.$:1,{但在这种情况下,它只返回一个文档。实际上这是另一个问题。我正在检查你的答案是否正确。谢谢你@Rahul Raj!