我正在尝试使用Mongoose在mongoDb数据库上通过2个参数进行查询。我需要查询文档是由谁创建的,还有一个名为events的子文档,它有一个日期。我想在一段时间内收回所有文件。
我的查询看起来像这样。
var earliest = new Date(2018,0,3);
var latest = new Date(2018,0,4);
Goal.find({createdBy:userId,'events.date':{$gte: earliest, $lte: latest}})
.exec(function(err,doc)){ //do stuff}
以下文件是返回的内容。我收回了数据库中的所有内容,并且没有考虑我的日期范围查询。我是Mongodb的新手,我不知道自己做错了什么。
[
{
_id: "5a4dac123f37dd3818950493",
goalName: "My First Goal",
createdBy: "5a4dab8c3f37dd3818950492",
__v: 0,
events:
[
{
_id: "5a4dac123f37dd3818950494",
eventText: "Test Goal",
eventType: "multiDay",
date: "2018-01-03T00:00:00.000Z",
eventLength: 7,
completed: false
},
{
_id: "5a4dac123f37dd3818950495",
eventText: "Test Goal",
eventType: "multiDay",
date: "2018-01-04T00:00:00.000Z",
eventLength: 7,
completed: false
},
{
_id: "5a4dac123f37dd3818950496",
eventText: "Test Goal",
eventType: "multiDay",
date: "2018-01-05T00:00:00.000Z",
eventLength: 7,
completed: false
}
],
startDate: "2018-01-04T00:00:00.000Z",
createdOn: "2018-01-04T00:00:00.000Z"
}
]
答案 0 :(得分:1)
匹配文档与匹配"数组元素之间存在差异"您的文档已包含整个数组,甚至包含与您的数组过滤条件不匹配的值。但是,由于您的文档匹配条件匹配,因此返回整个文档(包含所有数组条目)。
如果您只想要匹配的"元素"然后使用.aggregate()代替。 Mongodb find inside sub array
提供了有关如何将聚合用于此类任务的示例