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

Bagaimana-untuk:Pengguna memiliki penggemar

Bagaimana dengan asosiasi referensi diri:

class User
  include Mongoid::Document
  references_many :fans, 
                  :class_name => 'User', 
                  :stored_as => :array, 
                  :inverse_of => :fan_of

  references_many :fan_of, 
                  :class_name => 'User', 
                  :stored_as => :array, 
                  :inverse_of => :fans
end

# let's say we have users: al, ed, sports_star, movie_star    
sports_star.fans << al
movie_star.fans << al
sports_star.fans << ed
movie_star.fans << ed

movie_star.fans  # => al, ed
al.fan_of        # => sports_star, movie_star

Masalahnya adalah Anda mencoba melakukan asosiasi relasional hanya menggunakan dokumen yang disematkan. Ketika Anda memiliki Fan tertanam di dalam User , Anda hanya dapat mengakses Fan melalui User induknya . Anda tidak dapat melakukan sesuatu seperti Fan.find(some_id) karena tidak ada koleksi Fan catatan.

Akhirnya, MongoDB akan mendukung koleksi virtual yang memungkinkan Anda melakukan ini. Untuk saat ini, Anda harus menggunakan asosiasi tipe relasional. Jika Anda ingin menggunakan dokumen yang disematkan dalam kasus ini, Anda harus membuat beberapa metode kustom yang jelek dan tidak efisien untuk mencari melalui catatan induk.

Dengan MongoDB dan Mongoid, saya telah menemukan bahwa Anda dapat beralih antara asosiasi tertanam dan relasional dengan mudah. Hubungan tipe SQL dan hubungan yang disematkan keduanya memiliki tempatnya masing-masing dan dapat digunakan bersama untuk menghasilkan efek yang luar biasa.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana menemukan catatan acak di mongodb

  2. Bisakah Anda memiliki mongo $push prepend alih-alih menambahkan?

  3. Perbarui banyak dokumen dengan menyediakan dokumen di badan, luwak/mongodb

  4. Indeks Multikey MongoDB &Batas Persimpangan Indeks

  5. update_attributes mengembalikan selalu benar, bahkan jika nested_attributes tidak valid