MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tổng hợp MongoDb $ lookup với _ids nước ngoài trong mảng

Bạn phải $unwind để làm phẳng cả _ids nước ngoài vô hướng và tài liệu phụ và thêm $group ở cuối quy trình để lấy lại cấu trúc ban đầu.

$first bộ tích lũy để giữ các trường và $push với $arrayElemAt để tích lũy các giá trị mảng để điều chỉnh cho $unwind

var linkedModels = [
    {
        "$match": { "del": false }
    }, 
    {
        "$lookup": {
            from: "charnpcalign",
            localField: "align",
            foreignField: "_id",
            as: "linked_align"
        }
    }, 
    {
        "$unwind":"$classes"
    },
    {
        "$lookup": {
            from: "charnpcclass",
            localField: "classes",
            foreignField: "_id",
            as: "linked_classes"
        }
    },
    {
        "$group": {
           "_id": "$_id",
           "name": {"$first":"$name"},
           "align": {"$first":"$align"},
           "classes":{"$push":"$classes"},
           "carrying":{"$first":"$carrying"},
           "linked_align":{"$first":"$linked_align"},
           "linked_classes":{"$push":{"$arrayElemAt":["$linked_classes",0]}}
        }
    },
    {
        "$unwind":"$carrying"
    },
    {
        "$lookup": {
            from: "item",
            localField: "carrying.itemId",
            foreignField: "_id",
            as: "linked_carrying"
        }
    },
    {
        "$group": {
           "_id": "$_id",
           "name": {"$first":"$name"},
           "align": {"$first":"$align"},
           "classes":{"$first":"$classes"},
           "linked_align":{"$first":"$linked_align"},
           "carrying":{"$push":"$carrying"},
           "linked_carrying":{"$push":{"$arrayElemAt":["$linked_carrying",0]}}
        }
    }
]

Bạn không cần $unwind trên mảng vô hướng (classes ) trong phiên bản 3.4 và bạn có thể thay thế {"classes":{"$push":"$classes"}} &{"linked_classes":{"$push":{$arrayElemAt:["$linked_classes",0]}}} với {"classes":{"$first":"$classes"}} &{"linked_classes":{"$first":"$linked_classes"}} tương ứng.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tổng hợp Mongoose với geonear

  2. Bộ sưu tập Mongodb tổng số giờ thu thập

  3. Có cách nào đơn giản để xuất dữ liệu từ ứng dụng đã triển khai sao băng không?

  4. Hình mẫu tốt hơn để lọc bộ sưu tập

  5. Lỗi:querySrv ENODATA _mongodb._tcp.blog-cluster-0hb5z.mongodb.net tại QueryReqWrap.onresolve [as oncomplete]