Mongo DB:如何通过Id和日期进行查询

时间:2018-01-05 06:18:14

标签: node.js mongodb express mongoose

我正在尝试使用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"
  }
]

1 个答案:

答案 0 :(得分:1)

匹配文档与匹配"数组元素之间存在差异"您的文档已包含整个数组,甚至包含与您的数组过滤条件不匹配的值。但是,由于您的文档匹配条件匹配,因此返回整个文档(包含所有数组条目)。

如果您只想要匹配的"元素"然后使用.aggregate()代替。 Mongodb find inside sub array

提供了有关如何将聚合用于此类任务的示例