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

Bagaimana cara menghapus semua bidang kecuali kumpulan bidang yang diketahui?

Jika Anda tidak peduli dengan atomisitas maka Anda dapat melakukannya dengan save :

doc = db.myCollection.findOne({"_id": 123});
for (k in doc.field_to_prune) {
  if (k === 'keep_field_1') continue;
  if (k === 'keep_field_2') continue;
  delete doc.field_to_prune[k];
}
db.myCollection.save(doc);

Masalah utama dari solusi ini adalah bahwa itu bukan atom. Jadi, setiap pembaruan untuk doc antara findOne dan save akan hilang.

Alternatif sebenarnya adalah unset semua bidang yang tidak diinginkan alih-alih menyimpan doc :

doc = db.myCollection.findOne({"_id": 123});
unset = {};
for (k in doc.field_to_prune) {
  if (k === 'keep_field_1') continue;
  if (k === 'keep_field_2') continue;
  unset['field_to_prune.'+k] = 1;
}
db.myCollection.update({_id: doc._id}, {$unset: unset});

Solusi ini jauh lebih baik karena mongo menjalankan update atom, jadi tidak ada pembaruan yang akan hilang. Dan Anda tidak perlu koleksi lain untuk melakukan apa yang Anda inginkan.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Masalah dengan mengonfigurasi pengguna dan menghubungkan ke Mongo dengan PHP

  2. Memformat Angka sebagai Mata Uang dalam SQL

  3. MongoDB tidak dapat menggunakan bagian untuk melintasi elemen

  4. Cara termudah untuk mengonfigurasi Embedded MongoDB

  5. Gagal menjalankan Mongodb