获取包含聚合mongodb之间的日期的子数组上的文档

时间:2019-12-11 15:19:44

标签: mongodb

提供以下收藏:

[
 { 
    events: [
     {
      triggers: [
       {
        date: "2019-12-12T23:00:00"
       }
      ]
     }
    ]
 }
]

我希望能够提取日期范围介于今天和明天之间的任何日期的文档。 使用以下查询:

db.collection.aggregate([
  {
    $match: {
      "events.triggers.date": {
        $gte: "2019-12-11T23:00:00.000Z",
        $lt: "2019-12-12T23:59:00.000Z"
      }
    }
  }
]);

但是,当我执行此操作时,查询似乎正在查看日期大于但小于或等于但不一定位于同一“触发”对象中的任何文档。

任何人都知道如何在这样的子数组中进行过滤(之后我将在查询中进行更多操作,因此查找将不起作用)并使日期搜索特定于子项?

2 个答案:

答案 0 :(得分:0)

您快到了,查询中只有一些错误。这应该可行:

db.collection.aggregate([
  {
    '$match': {
      '$and': [
        {"events.triggers.date": { '$gte': "2019-12-11T23:00:00.000Z" }},
        {"events.triggers.date": { '$lt': "2019-12-11T23:00:00.000Z" }}
      ]
    }
  }
]);

答案 1 :(得分:0)

所以我最终找到了它。

正在寻找解决方案的人。这里是: elemMatch

db.collection.aggregate([
  {
    $match: {
      "events.triggers": {
        $elemMatch: {
            "date": {
                $gte: "2019-12-11T23:00:00.000Z",
                $lt: "2019-12-12T23:59:00.000Z"
            }
        }
      }
    }
  }
]);