MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

luwak agregat cara memetakan beberapa koleksi menjadi satu Array

Untuk situasi seperti ini,$facet membantu mengkategorikan data yang masuk

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",[] ]
          }
        }
      }
    }
  }
])

Bekerja Taman bermain Mongo

Catatan:Saya merasa ini semacam pola Anti yang Anda ikuti. Jika Anda berada di tahap awal proyek, lebih baik ubah strukturnya jika saya tidak salah.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. DBaaS Hosting MongoDB Pertama yang Mendukung Pemerintah Azure untuk Sektor Publik

  2. Apakah mungkin untuk mengulangi kursor mongo dua kali?

  3. di Bereaksi, saya memanggil dua daftar ke halaman dari mongo dan saya ingin mengklik satu untuk memfilter apa yang ditampilkan di yang lain

  4. Cara bergabung dan mengurutkan beberapa koleksi dalam satu saluran di Mongo

  5. Cara Membagi Shard Key Berbasis GUID Secara Terprogram dengan MongoDB