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

mongoose tổng hợp cách ánh xạ nhiều bộ sưu tập vào một Mảng

Đối với loại tình huống này, $facet giúp phân loại dữ liệu đến

db.Collection_A.aggregate([
  { $unwind: "$includes },
  {
    "$facet": {
      "joinB": [            
        {
          "$lookup": {
            "from": "Collection_B", "localField": "includes.includes_id",
            "foreignField": "_id", "as": "includes.includes_list"
          }
        },
        {
          "$group": {
            "_id": "$_id",
            "name": { "$first": "$name" },
            includes: { $push: "$includes" }
          }
        }
      ],
      "joinC": [            
        {
          "$lookup": {
            "from": "Collection_C", "localField": "includes.includes_id",
            "foreignField": "_id", "as": "includes.includes_list"
          }
        },
        {
          "$group": {
            "_id": "$_id",
            "name": { "$first": "$name" },
            includes: { $push: "$includes" }
          }
        }
      ],
      "joinD": [
        {
          "$lookup": {
            "from": "Collection_D", "localField": "includes.includes_id",
            "foreignField": "_id", "as": "includes.includes_list"
          }
        },
        {
          "$group": {
            "_id": "$_id",
            "name": { "$first": "$name" },
            includes: { $push: "$includes" }
          }
        }
      ],
      
    }
  },
  {
    $project: {
      combined: {
        "$concatArrays": [ "$joinB", "$joinC", "$joinD" ]
      }
    }
  },
  { "$unwind": "$combined" },
  {
    "$replaceRoot": { "newRoot": "$combined" }
  },
  {
    "$project": {
      _id: 1,
      name: 1,
      includes: {
        $filter: {
          input: "$includes",
          cond: {
            $ne: [ "$$this.includes_list",[] ]
          }
        }
      }
    }
  }
])

Làm việc Sân chơi Mongo

Lưu ý:Tôi cảm thấy đây là kiểu Anti mà bạn làm theo. Nếu bạn đang ở giai đoạn đầu của dự án, tốt hơn hết hãy thay đổi cấu trúc nếu tôi không nhầm.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để xóa một đối tượng lồng nhau dựa trên ObjectId của nó?

  2. hiểu id mongo mới và sử dụng nó với bộ định tuyến sắt

  3. Đang giảm một trường kiểu số trong mongodb và nodejs

  4. Truy cập bộ sưu tập con trong mongoid với biểu mẫu rails để chỉnh sửa và tạo mục nhập mới

  5. MongoDB $ strLenBytes