仅返回文档中匹配的对象

时间:2018-06-11 17:50:05

标签: node.js mongodb mongoose aggregation-framework

我正在使用Mongoose构建Node-Js应用程序我的问题是:有没有办法从文档而不是整个对象返回匹配的对象更具体我想要返回包含日期<在2018-06-10 这是我的代码示例:

[
  {
    companyName: "example",
    "history": [
      {
        "company_report_result": [
          {
            "attribut": 1111,

          }
        ],
        "date": ISODate("2018-06-06T08:11:00.000Z")
      },
      {
        "company_report_result": [
          {
            "attribut": 22222,

          }
        ],
        "date": ISODate("2018-06-12T08:11:00.000Z")
      },
      {
        "company_report_result": [
          {
            "attribut": 3333,

          }
        ],
        "date": ISODate("2018-06-07T08:11:00.000Z")
      }
    ]
  }
]

查询:

Campaign.find({ 'table.history.date': { $gt: new Date('2018-06-10') } })

1 个答案:

答案 0 :(得分:0)

您需要使用$filter aggregation 运算符,该运算符仅提供数组中匹配的元素并转义其他元素

db.collection.aggregate([
  {
    $match: {
      "history.date": {
        $gte: new Date('2018-06-10')
      }
    }
  },
  {
    $project: {
      companyName: 1,
      history: {
        $filter: {
          input: "$history",
          as: "hist",
          cond: {
            $gte: [
              "$$hist.date",
              new Date('2018-06-10')
            ]
          }
        }
      }
    }
  }
])

以上查询将返回

[
  {
    companyName: "example",
    "history": [
      {
        "company_report_result": [
          {
            "attribut": 22222,

          }
        ],
        "date": ISODate("2018-06-12T08:11:00.000Z")
      }
    ]
  }
]