本文介绍了具有嵌套文档的Mongodb $ lookup的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用mongo的查找创建联接.我有这三个收藏.
I am trying to create a join using mongo's lookup. I have these three collections.
orderTracking
orderTracking
{ _id: ObejctId("59fb7815b3b8429f4750b0df"), itemName : "Hamam Soap", TrackLocation: [{locationId: 1, at:"2017-10-11"}, {locationId: 2,at:"2017-10-13"}], userId : 12, price: 20 }locationType
locationType
{ _id: ObejctId("59b2111345cb72345a35fefd"), locationId : 1 productTypeName: "Warehouse" },{ _id: ObejctId("59af8ce445cb72345a35feea"), locationId : 2 productTypeName: "On Transit" }用户
{ _id: ObejctId("59a504eb6171b554c02292a9"), "user ID":12, "userName" : "Shahabaz Shafi", "dateOfBirth" : "1992-01-01", "addres": { "country" : "India", "state" : "Karnataka", "city" : "Bengaluru" } }并尝试将其简化为此类输出.
and trying to flatten this to this kind of output.
{ "userName" : "Shahabaz Shafi", "userId":12, "dateOfBirth" : "1992-01-01", "country" : "India", "state" : "Karnataka", "city" : "Bengaluru" "locationType" : [ {productTypeName: "Warehouse",at:"2017-10-11"}, {productTypeName: "On Transit",at:"2017-10-13"}] }15-11-2018更新了输出
15-11-2018 Updated output
对输出列进行了一些更改
Made some changes to the output columns
{ "userName":"Shahabaz Shafi", "userId":12, "dateOfBirth":"1992-01-01", "country":"India", "state":"Karnataka", "city":"Bengaluru", "items":[ { "itemName":"Hamam Soap", "userId":12, "price":20, "TrackLocation":[ { "locationId":1, "at":"2017-10-11", "productTypeName":"Warehouse" }, { "locationId":2, "at":"2017-10-13", "productTypeName":"On Transit" } ] } ] }我该如何处理?
PS:我也在使用指南针
PS : I am also using compass
推荐答案您可以将以下聚合与mongodb 3.6 及更高版本一起使用
You can use below aggregation with mongodb 3.6 and above
db.User.aggregate([ { "$lookup": { "from": "orderTracking", "let": { "userId": "$userId" }, "pipeline": [ { "$match": { "$expr": { "$eq": ["$userId", "$$userId"] }}}, { "$unwind": "$TrackLocation" }, { "$lookup": { "from": "locationType", "let": { "location": "$TrackLocation.locationId" }, "pipeline": [ { "$match": { "$expr": { "$eq": ["$locationId", "$$location"] }}} ], "as": "locationType" }}, { "$project": { "_id": 0, "productTypeName": { "$arrayElemAt": ["$locationType.productTypeName", 0] }, "at": "$TrackLocation.at" }} ], "as": "locationType" }}, { "$replaceRoot": { "newRoot": { "$mergeObjects": ["$addres", "$$ROOT"] }}}, { "$project": { "addres": 0 }} ])输出
[ { "_id": ObjectId("59a504eb6171b554c02292a9"), "city": "Bengaluru", "country": "India", "dateOfBirth": "1992-01-01", "locationType": [ { "at": "2017-10-11", "productTypeName": "Warehouse" }, { "at": "2017-10-13", "productTypeName": "On Transit" } ], "state": "Karnataka", "userId": 12, "userName": "Shahabaz Shafi" } ]更多推荐
具有嵌套文档的Mongodb $ lookup
发布评论