【问题标题】:MongoDB Data Range Filter SubcollectionMongoDB 数据范围过滤器子集合
【发布时间】:2022-02-16 00:56:15
【问题描述】:

我正在尝试根据数据范围过滤器获取子集合的值。但是,当我进行过滤时,我得到了集合的所有值。

例如,对于以下数据,我只想获取 2019-01-012019-12-31 范围内的日期值

[
  {
    symbol: "sensor1",
    data: [
      {
        date: ISODate("2017-11-25T00:00:00.000Z"),
        value: 2.45,
        
      },
      {
        date: ISODate("2019-11-26T00:00:00.000Z"),
        value: 2.2444
      },
      {
        date: ISODate("2019-12-25T00:00:00.000Z"),
        value: 2.5,
        
      },
      {
        date: ISODate("2020-01-25T00:00:00.000Z"),
        value: 2.461,
        
      },
      
    ]
  }
]

有什么推荐吗? 谢谢!

这里是游乐场:https://mongoplayground.net/p/UGpvgzjoFCi

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您可以使用$project$filter 进行聚合。 $filter 可以在数组上使用,根据条件过滤掉日期。

    db.collection.aggregate([
      {
        $match: {
          symbol: "sensor1"
        }
      },
      {
        $project: {
          "symbol": 1,  //show symbol in final result
          "_id": 0,     //hide _id in final result
          "data": {
            $filter: {
              input: "$data",
              as: "d",
              cond: {
                $and: [
                  {
                    $gt: [
                      "$$d.date",
                      ISODate("2019-01-01")
                    ]
                  },
                  {
                    $lt: [
                      "$$d.date",
                      ISODate("2020-12-31")
                    ]
                  }
                ]
              }
            }
          }
        }
      }
    ])
    

    demo

    【讨论】:

    猜你喜欢
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多