【问题标题】:Mongoose / MongoDB aggregate filter by multiple date rangesMongoose / MongoDB 按多个日期范围聚合过滤器
【发布时间】:2018-11-28 14:31:33
【问题描述】:

我有一个包含 365 个文档的集合。每个文档如下:

{
  date: "2018-11-27T00:00:00.000Z",
  title: "Went to school"
},
{
  date: "2018-11-28T00:00:00.000Z",
  title: "Bought a car"
}

我想按多个数据范围过滤文档。 示例:

  1. 仅显示在2018-01-042018-11-24 之前创建的文档
  2. 结果不应包含在2018-05-06 - 2018-06-07 等区间内创建的文档

到目前为止,我得到了这个:

const dates = await Calendar.aggregate(
  [{
      $match: {
        $and: [{
            date: {
              $not: {
                $lte: new Date(2018, 0, 7),
              }

            }
          },
          {
            date: {
              $not: {
                $gte: new Date(2018, 10, 15)
              }
            }
          },
          {
            date: {
              $not: {
                $gt: new Date(2018, 6, 31),
                $lt: new Date(2018, 7, 15)
              }
            }
          }
        ]
      }
    },
    {
      $project: {
        title: 1,
        date: 1
      }
    }
  ]
).sort('date')

提前谢谢你!

【问题讨论】:

    标签: mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    您需要在查询中将$lte$gte 与单个date 对象一起使用

    Calendar.aggregate([
      { "$match": {
        "$and": [
          { "date": { "$lte": new Date(2018, 0, 7), "$gte": new Date(2018, 10, 15) }},
          { "date": { "$not": { "$lte": new Date(2018, 0, 7), "$gte": new Date(2018, 10, 15) }}}
        ]
      }}
    ])
    

    【讨论】:

      猜你喜欢
      • 2019-09-23
      • 1970-01-01
      • 2014-01-29
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 2016-02-12
      相关资源
      最近更新 更多