[英]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.