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

Bagaimana Anda memodelkan hubungan pertemanan di MongoDB?

MongoDB umumnya tidak cocok untuk memodelkan hubungan grafik. Ada database grafik khusus yang unggul dalam tugas ini.

Namun, ketika Anda tidak ingin menambahkan teknologi database lain ke dalam campuran, saya akan merekomendasikan untuk membuat koleksi baru frienships dan modelkan setiap hubungan teman sebagai dokumen dengan larik dua entri, masing-masing objek dengan informasi singkat tentang salah satu pengguna yang Anda perlukan untuk menampilkan entri di daftar teman Anda:

{
    friendship: [
       {
            id:123,
            name: "Bob",
            avatar: "Bob.jpg"
       },
       {
            id:456,
            name: "Alice",
            avatar: "Alice.jpg"
       }
    ]
}

Alasan duplikasi informasi dari dokumen pengguna dalam dokumen pertemanan adalah untuk menghindari permintaan kedua ke koleksi pengguna untuk mendapatkan semua data untuk menampilkan daftar teman pengguna. MongoDB tidak dapat melakukan GABUNG hanya dapat melakukan GABUNG pada koleksi yang tidak di-shard , jadi Anda harus menghindari penyebaran data yang Anda perlukan untuk kasus penggunaan tertentu di beberapa koleksi, meskipun itu berarti Anda membuat redundansi. Jika tidak, Anda perlu melakukan beberapa kueri satu demi satu, yang memperlambat waktu respons aplikasi Anda secara signifikan.

Bila Anda ingin mendapatkan daftar teman pengguna 123, Anda akan melakukan db.friendships.find({"friendship.id", 123}) (indeks di friendship.id akan meningkatkan kinerja) dan kemudian menerima daftar dokumen di mana Bob adalah teman pertama atau kedua.

Anda kemudian akan mengulangi dokumen-dokumen ini dan menampilkan info singkat dari entri-array yang bukan pengguna 123.

Atau Anda dapat memfilter entri Bob di database dengan saluran agregasi. Gunakan kueri $match di atas, $unwind array pertemanan, lalu $match dokumen yang idnya bukan 123. Ini akan menjadi trade-off:Anda menghemat bandwidth dengan mengorbankan beban CPU pada server database.

Untuk menanyakan apakah hubungan pertemanan sudah ada, gunakan:

db.friendships.find( { $and: [ 
       { "friendship.id": 123 }, 
       { "friendship.id": 456 } 
    ] } ).count();



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Agregasi Mongo vs Java untuk loop dan kinerja

  2. Apa cara yang tepat untuk mengelola koneksi MongoDB di ASP.Net MVC?

  3. Bagaimana cara mengisi entitas bersarang di luwak?

  4. kelompokkan berdasarkan tanggal dalam permintaan mogodb tanpa mempertimbangkan waktu

  5. Inisialisasi global yang gagal:BadValue Tidak valid atau tidak ada set lokal pengguna. Harap pastikan variabel lingkungan LANG dan/atau LC_* disetel dengan benar