簡體   English   中英

如何訪問 mongodb 聚合管道中的嵌套對象數組?

[英]How to access nested array of objects in mongodb aggregation pipeline?

我有一個這樣的文檔(這是幾個流水線階段后的結果)

[
  {
    "_id": ObjectId("5e9d5785e4c8343bb2b455cc"),
    "name": "Jenny Adams",
    "report": [
      { "category":"Beauty", "status":"submitted", "submitted_on": [{"_id": "xyz", "timestamp":"2022-02-23T06:10:05.832+00:00"}, {"_id": "abc", "timestamp":"2021-03-23T06:10:05.832+00:00"}] },
      { "category":"Kitchen", "status":"submitted", "submitted_on": [{"_id": "mnp", "timestamp":"2022-05-08T06:10:06.432+00:00"}] }
    ]
  },
  {
    "_id": ObjectId("5e9d5785e4c8343bb2b455db"),
    "name": "Mathew Smith",
    "report": [
      { "category":"Household", "status":"submitted", "submitted_on": [{"_id": "123", "timestamp":"2022-02-23T06:10:05.832+00:00"}, {"_id": "345", "timestamp":"2021-03-23T06:10:05.832+00:00"}] },
      { "category":"Garden", "status":"submitted", "submitted_on": [{"_id": "567", "timestamp":"2022-05-08T06:10:06.432+00:00"}] },
      { "category":"BakingNeeds", "status":"submitted", "submitted_on": [{"_id": "891", "timestamp":"2022-05-08T06:10:06.432+00:00"}] }
    ]
  }
]

我有時間段的用戶輸入 -

from - 2021-02-23T06:10:05.832+00:00
to - 2022-02-23T06:10:05.832+00:00

現在我想從報告中過濾出某個時間范圍內的對象,如果"submitted_on[-1]["timestamp"]"日期時間戳的范圍內,我只想保留 object。 由於我試過這個嵌套,我正在努力訪問時間戳

$project: {
  "name": 1,
  "report": {
    "category": 1,
    "status": 1,
    "submitted_on": 1,
    "timestamp": {
      $arrayElemAt: ["$report.cataloger_submitted_on", -1]
    }
  }
}

但這會獲取報告中所有項目的報告數組{"_id": "bcd", "timestamp":"2022-05-08T06:10:06.432+00:00"}的最后一個 object。 我怎樣才能做到這一點 select 每個對象的最后一個時間戳。

您可以用兩個階段替換聚合管道中的階段: $unwind$addFields以獲得我認為您想要的:

  {
    $unwind: "$report"
  },
  {
    "$addFields": {
      "timestamp": {
        $arrayElemAt: [
          "$report.submitted_on",
          -1
        ]
      }
    }
  },

$unwind階段將外部數組分解為文檔,因為您要對每個文檔執行一個操作。 以您的示例在此處查看游樂場。 如果您計划通過更多步驟繼續聚合管道,您可以跳過$addFields階段並將條件包含在下一個$match階段中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM