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

Apakah MongoDB $set hanya menulis bidang atau seluruh dokumen?

TL;DR:$inc menjamin pembaruan di tempat, $set tidak, tetapi dalam keadaan yang sangat spesifik, ini juga dapat dilakukan di tempat.

Detail

Ada dua aspek dalam hal ini:

  1. bagaimana cara melewati kabel?

    Informasi dikirim sebagai operasi, $set tetap menjadi $set jadi delta. Itu juga berlaku untuk oplog yang digunakan untuk replikasi. Dengan cara ini, menggunakan $set lebih efisien dalam hal bandwidth.

  2. bagaimana pembaruan di disk?

    MongoDB melakukan pembaruan di tempat jika dan hanya jika kunci (bidang) sudah ada , jadi saat Anda menambahkan bidang baru ke dokumen, itu adalah operasi yang lebih besar daripada sekadar menetapkan nilai yang berbeda ke bidang yang sudah ada.

    Namun, meskipun demikian, nilainya harus memiliki ukuran yang sama dan harus tidak mengubah jenis dan mereka harus bertipe double, long, int or bool , jika tidak maka tidak pembaruan di tempat saat ini.

Saya tidak yakin bagaimana yang terakhir ini benar-benar penting dalam praktik , tetapi server pasti menggunakan jalur kode yang sama sekali berbeda untuk keduanya, sehingga misalnya dapat menyebabkan pemesanan ulang bidang. Untuk dokumen yang sangat besar, hal itu mungkin akan menghasilkan perbedaan kinerja yang terukur.

Ini menunjukkan bahwa $inc sangat berbeda karena hanya mengizinkan operasi yang pasti ada, karena $inc hanya beroperasi pada tipe numerik dan tidak dapat mengubah ukuran atau tipe, secara alami.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDb :Temukan elemen umum dari dua array dalam kueri

  2. Mencegah kondisi balapan terkait database di Node.js

  3. Cari berdasarkan elemen objek dalam array

  4. Koleksi Salinan Mongo dan Izin Pengguna

  5. MongoDB dan Asp Core hanya memperbarui kunci:pasangan nilai alih-alih seluruh model