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

MongoDB:Menggabungkan data dari beberapa koleksi menjadi satu..bagaimana?

MongoDB 3.2 sekarang memungkinkan seseorang untuk menggabungkan data dari beberapa koleksi menjadi satu melalui tahap agregasi $lookup. Sebagai contoh praktis, katakanlah Anda memiliki data tentang buku yang dibagi menjadi dua koleksi berbeda.

Koleksi pertama, disebut books , dengan data sebagai berikut:

{
    "isbn": "978-3-16-148410-0",
    "title": "Some cool book",
    "author": "John Doe"
}
{
    "isbn": "978-3-16-148999-9",
    "title": "Another awesome book",
    "author": "Jane Roe"
}

Dan koleksi kedua, disebut books_selling_data , dengan data sebagai berikut:

{
    "_id": ObjectId("56e31bcf76cdf52e541d9d26"),
    "isbn": "978-3-16-148410-0",
    "copies_sold": 12500
}
{
    "_id": ObjectId("56e31ce076cdf52e541d9d28"),
    "isbn": "978-3-16-148999-9",
    "copies_sold": 720050
}
{
    "_id": ObjectId("56e31ce076cdf52e541d9d29"),
    "isbn": "978-3-16-148999-9",
    "copies_sold": 1000
}

Untuk menggabungkan kedua koleksi hanya masalah menggunakan $lookup dengan cara berikut:

db.books.aggregate([{
    $lookup: {
            from: "books_selling_data",
            localField: "isbn",
            foreignField: "isbn",
            as: "copies_sold"
        }
}])

Setelah agregasi ini, books koleksi akan terlihat seperti berikut:

{
    "isbn": "978-3-16-148410-0",
    "title": "Some cool book",
    "author": "John Doe",
    "copies_sold": [
        {
            "_id": ObjectId("56e31bcf76cdf52e541d9d26"),
            "isbn": "978-3-16-148410-0",
            "copies_sold": 12500
        }
    ]
}
{
    "isbn": "978-3-16-148999-9",
    "title": "Another awesome book",
    "author": "Jane Roe",
    "copies_sold": [
        {
            "_id": ObjectId("56e31ce076cdf52e541d9d28"),
            "isbn": "978-3-16-148999-9",
            "copies_sold": 720050
        },
        {
            "_id": ObjectId("56e31ce076cdf52e541d9d28"),
            "isbn": "978-3-16-148999-9",
            "copies_sold": 1000
        }
    ]
}

Beberapa hal yang perlu diperhatikan:

  1. Koleksi "dari", dalam hal ini books_selling_data , tidak dapat di-sharding.
  2. Bidang "sebagai" akan berupa larik, seperti contoh di atas.
  3. Opsi "localField" dan "foreignField" pada tahap $lookup akan diperlakukan sebagai null untuk tujuan pencocokan jika tidak ada di koleksi masing-masing (dokumen $lookup memiliki contoh sempurna tentang hal itu).

Jadi, sebagai kesimpulan, jika Anda ingin menggabungkan kedua koleksi, memiliki, dalam hal ini, bidang datar copy_sold dengan total salinan yang terjual, Anda harus bekerja sedikit lebih lama, mungkin menggunakan koleksi perantara yang akan, kemudian, menjadi $out untuk koleksi akhir.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tingkat Ketidakamanan MongoDB dan Cara Menghindarinya

  2. Bagaimana cara memperbarui nilai menggunakan pymongo?

  3. Buat Indeks Geospasial 2dsphere untuk Kueri Bulat di MongoDB

  4. Bagaimana cara menyemai database mongo menggunakan docker-compose?

  5. Bagaimana cara memeriksa apakah indeks sedang digunakan?