[英]MongoDB: populating arrays on nested document with $lookup in aggregation
[英]MongoDB Aggregation Framework group and merge with the nested document in arrays
用例:我在集合中有多個帶有嵌套文檔數組(PODDetails)的文檔,需要一個結果組(WTID 字段)和一個數組(PODDetails)合並成單個文檔(PODDetails 除外,其他細節相同)。
以下是集合中的文檔:
{
"_id": "180910eb-4670-4ccb-ac89-0e993b050105",
"WTID": "WT1389",
"TDLNumber": "002",
"POD": "SW 35-44-07-W5",
"PODDetails": [
{
"LoadStartDate": "2019-10-18",
"LoadStartTime": "17:37:54",
"LoadStopDate": "2019-10-18",
"LoadStopTime": "17:37:54",
"Volume": 15,
"VolUnit": "m3"
}
],
"Status": "Active",
"createdon": {
"$date": "2020-03-20T17:37:54.000Z"
}
},
{
"_id": "5a4d3ee0-83e3-40df-a3a3-28f8c7560106",
"WTID": "WT1389",
"TDLNumber": "002",
"POD": "SW 35-44-07-W5",
"PODDetails": [
{
"LoadStartDate": "2019-10-18",
"LoadStartTime": "17:38:33",
"LoadStopDate": "2019-10-18",
"LoadStopTime": "17:38:33",
"Volume": 25,
"VolUnit": "m3"
}
],
"Status": "Active",
"createdon": {
"$date": "2020-03-20T18:55:15.000Z"
}
},
{
"_id": "180910eb-4670-4ccb-ac89-0e993b050107",
"WTID": "WT1390",
"TDLNumber": "002",
"POD": "SW 35-44-07-W5",
"PODDetails": [
{
"LoadStartDate": "2019-10-18",
"LoadStartTime": "17:37:54",
"LoadStopDate": "2019-10-18",
"LoadStopTime": "17:37:54",
"Volume": 15,
"VolUnit": "m3"
}
],
"Status": "Active",
"createdon": {
"$date": "2020-03-20T17:37:54.000Z"
}
}
結果應如下所示,基於“WTID”字段
{
"_id": "180910eb-4670-4ccb-ac89-0e993b050105",
"WTID": "WT1389",
"TDLNumber": "002",
"POD": "SW 35-44-07-W5",
"PODDetails": [
{
"LoadStartDate": "2019-10-18",
"LoadStartTime": "17:37:54",
"LoadStopDate": "2019-10-18",
"LoadStopTime": "17:37:54",
"Volume": 15,
"VolUnit": "m3"
},
{
"LoadStartDate": "2019-10-18",
"LoadStartTime": "17:38:33",
"LoadStopDate": "2019-10-18",
"LoadStopTime": "17:38:33",
"Volume": 25,
"VolUnit": "m3"
}
],
"createdon": {
"$date": "2020-03-20T17:37:54.000Z"
}
},
{
"_id": "180910eb-4670-4ccb-ac89-0e993b050107",
"WTID": "WT1390",
"TDLNumber": "002",
"POD": "SW 35-44-07-W5",
"PODDetails": [
{
"LoadStartDate": "2019-10-18",
"LoadStartTime": "17:37:54",
"LoadStopDate": "2019-10-18",
"LoadStopTime": "17:37:54",
"Volume": 15,
"VolUnit": "m3"
}
],
"createdon": {
"$date": "2020-03-20T17:37:54.000Z"
}
}
以下是我嘗試過的'...我只需要為當前日期(即今天)獲取文檔
{
aggregate([{
"$addFields": {
"CreatedOnDate": {
"$dateToString": {
"format": "%Y-%m-%d",
"date": {
"$add": ["$createdon", 18000000]
}
}
}
}
}, {
"$match": {
"CreatedOnDate": {
"$gte": "2020-03-20",
"$lte": "2020-03-20"
},
"Status": {
"$eq": "Active"
}
}
}, {
"$unwind": "$PODDetails"
}, {
"$group": {
"WaterTrackingID": "$WaterTrackingID",
"POD": {
"$addToSet": "$PODDetails"
},
"data": {
"$first": "$$ROOT"
}
}
}, {
"$project": {
"TDLNumber": "$data.TDLNumber",
"PointOfDiversion": "$data.PointOfDiversion",
"POD": 1,
"CreatedOnDate": "$data.CreatedOnDate"
}
}])
}
但是,此查詢不起作用...
這里出了什么問題。 任何幫助,將不勝感激!!
在您的聚合查詢中,很多事情都出錯了!
這是一個似乎可以實現您想要的查詢:
db.collection.aggregate([
{
$match: {
$expr: {
$eq: [
{
$dateToString: {
date: "$createdon",
format: "%Y-%m-%d"
}
},
"2020-03-20"
]
},
}
},
{
$group: {
_id: "$WTID",
POD: {
$first: "$POD"
},
PODDetails: {
$push:
{
$arrayElemAt: [
"$PODDetails",
0
]
}
},
TDLNumber: {
$first: "$TDLNumber"
},
createdon: {
$first: {
$dateToString: {
date: "$createdon",
format: "%Y-%m-%d"
}
},
},
}
}
])
會輸出
[
{
"POD": "SW 35-44-07-W5",
"PODDetails": [
{
"LoadStartDate": "2019-10-18",
"LoadStartTime": "17:37:54",
"LoadStopDate": "2019-10-18",
"LoadStopTime": "17:37:54",
"VolUnit": "m3",
"Volume": 15
}
,
{
"LoadStartDate": "2019-10-18",
"LoadStartTime": "17:38:33",
"LoadStopDate": "2019-10-18",
"LoadStopTime": "17:38:33",
"VolUnit": "m3",
"Volume": 25
}
],
"TDLNumber": "002",
"_id": "WT1389",
"createdon": "2020-03-20"
},
{
"POD": "SW 35-44-07-W5",
"PODDetails": [
{
"LoadStartDate": "2019-10-18",
"LoadStartTime": "17:37:54",
"LoadStopDate": "2019-10-18",
"LoadStopTime": "17:37:54",
"VolUnit": "m3",
"Volume": 15
}
],
"TDLNumber": "002",
"_id": "WT1390",
"createdon": "2020-03-20"
}
]
這是我基於@matthPen 的回答的解決方法
db.collection.aggregate(
[
{$match:{Status:"Active"}},
{$match: {
$expr: {
$eq: [
{
$dateToString: {
date: "$createdon",
format: "%Y-%m-%d"
}
},
"2020-03-20"
]
},
}},
{$group : {_id : "$WTID", PODDetails : {$push : "$PODDetails"},
TDLNumber: {$first: "$TDLNumber"}, POD: {$first: "$POD"}
}},
{$unwind : "$PODDetails"},
{$unwind : "$PODDetails"},
{$group : { _id : "$_id", PODDetails : {$addToSet : "$PODDetails"},
TDLNumber: {$first: "$TDLNumber"}, POD: {$first: "$POD"}
}},
{$project:{WaterTrackingID:"$_id", TDLNumber:"$TDLNumber", POD:"$POD", PODDetails:"$PODDetails"}}
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.