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!