[英]$lookup with nested array of objects
我的文檔有包含多個對象的數組,我需要找到相關的值並推送到同一個數組中。
大車
{
"_id" : ObjectId("5b2b72119fbb60750e0061b9"),
"cartId" : "1529573905701",
"supplierId" : ObjectId("5b221d1b63eda2902418434d"),
"user_id" : "5b20c54651e68057b3cbe745",
"createdAt" : ISODate("2018-06-21T09:38:25.680Z"),
"services" : [
{
"date" : "21-06-2018",
"timeSlot_id" : ObjectId("5b29e08cb116c31f5b1f56c6"),
"time" : "03:30 PM - 04:30 PM",
"serviceId" : ObjectId("5b24aff4abf2494701bc1c15"),
"cost" : 250,
"_id" : ObjectId("5b2b72119fbb60750e0061ba")
},
{
"_id" : ObjectId("5b2b72329fbb60750e0061bb"),
"cost" : 250,
"serviceId" : ObjectId("5b24aff4abf2494701bc1c15"),
"time" : "03:30 PM - 04:30 PM",
"timeSlot_id" : ObjectId("5b29e08cb116c31f5b1f56c6"),
"date" : "21-06-2018"
}
],
"__v" : 0
}
服務
{
"_id" : ObjectId("5b24aff4abf2494701bc1c15"),
"isActivated" : true,
"supplierServiceId" : 900146649,
"serviceId" : 99473640,
"serviceName" : "AC Reparing",
"description" : "all type of AC, Split AC and Window AC",
"cost" : 250,
"serviceDuration" : "60",
"startTime" : "07:00 AM",
"endTime" : "08:30 PM",
"supplierId" : "5b221d1b63eda2902418434d",
"createdAt" : ISODate("2018-06-16T06:36:36.091Z"),
"__v" : 0
}
時隙
{
"_id" : ObjectId("5b29e08cb116c31f5b1f56c6"),
"displayString" : "03:30 PM - 04:30 PM",
"isActivated" : true,
"startTime" : "15:30 PM",
"endTime" : "16:30 PM",
"duration" : "60",
"createdAt" : ISODate("2018-06-20T05:05:16.405Z"),
"__v" : 0
}
在CART 中的服務中有兩個值serviceId和timeSlot_id
*我需要相關集合中與兩者相關的數據。 在同一個對象內。
Mongo 版本 -v3.6.5
請幫助解決這個問題。 提前致謝。
您需要對services
進行$unwind
以將其timeSlot_id
和serviceId
與另一個timeSlot_id
和ServiceId
集合的_id
匹配...然后您可以$group
它以開始“回滾”到數組中的過程。
如果你有 mongodb 3.6版
Cart.aggregate([
{ "$match": { "user_id": _user._id } },
{ "$unwind": "$services" },
{ "$lookup": {
"from": TimeSlot.collection.name,
"let": { "timeSlot_id": "$services.timeSlot_id" },
"pipeline": [
{ "$match": { "$expr": { "$eq": [ "$_id", "$$timeSlot_id" ] } } }
],
"as": "services.timeSlot_id"
}},
{ "$lookup": {
"from": Service.collection.name,
"let": { "serviceId": "$services.serviceId" },
"pipeline": [
{ "$match": { "$expr": { "$eq": [ "$_id", "$$serviceId" ] } } }
],
"as": "services.serviceId"
}},
{ "$unwind": "$services.timeSlot_id" },
{ "$unwind": "$services.serviceId" },
{ "$group": {
"_id": "$_id",
"services": { "$push": "$services" },
"cartId" : { "$first": "$cartId" },
"supplierId" : { "$first": "$supplierId" },
"user_id" : { "$first": "$user_id" },
"createdAt" : { "$first": "$createdAt" }
}}
])
如果你有3.6之前的 mongodb 版本
Cart.aggregate([
{ "$match": { "user_id": _user._id } },
{ "$unwind": "$services" },
{ "$lookup": {
"from": TimeSlot.collection.name,
"localField": "services.timeSlot_id",
"foreignField": "_id",
"as": "services.timeSlot_id",
}},
{ "$lookup": {
"from": Service.collection.name,
"localField": "services.serviceId",
"foreignField": "_id",
"as": "services.serviceId",
}},
{ "$unwind": "$services.timeSlot_id" },
{ "$unwind": "$services.serviceId" },
{ "$group": {
"_id": "$_id",
"services": { "$push": "$services" },
"cartId" : { "$first": "$cartId" },
"supplierId" : { "$first": "$supplierId" },
"user_id" : { "$first": "$user_id" },
"createdAt" : { "$first": "$createdAt" }
}}
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.