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

Jika nilai properti adalah nol saat memperbarui maka properti itu tidak boleh ditambahkan ke catatan

Saya tidak akan menulis seperti ini, tetapi saya akan memberi tahu Anda mengapa kode Anda gagal.

Masalahnya adalah blok $set Anda

Anda memilih untuk secara khusus menyetel nilai ke objek pembaruan yang diteruskan. Jika nilainya undefined Anda memaksa mongo untuk menyetelnya ke null .

Inilah masalahnya

contoh, dalam DB:

{
    "_id" : ObjectId("ns8f9yyuo32hru0fu23oh"),
    "name" : "firstTest",
    "nickname": "jack",
    "__v" : 0
}

JIKA Anda lulus testToUpdate = { name: 'foo' } Anda akan berakhir dengan

 Test.update({ ... }, { $set: { name: 'foo', nickname: undefined }}

karena Anda mendapatkan updatedValues.nickname dari argumen dan itu tidak ditentukan

Apa yang Anda inginkan adalah

Test.update({ ... }, { $set: updatedValues }

yang diterjemahkan menjadi

Test.update({ ... }, { $set: { name: 'foo' } }

Anda tidak lagi memberikan kunci untuk nama panggilan, sehingga tidak membuatnya disetel ke undefined/null.

Saya akan menggunakan plugin luwak dan tidak khawatir tentang meneruskan bidang secara manual sampai ke model Anda (lihat github.com/autolotto/mongoose-model-update )

  • Anda dapat menentukan bidang yang dapat diperbarui dan kemudian Anda cukup melakukan model.update(req.body) dan jangan khawatir tentang semua ini
  • Bahkan jika Anda tidak ingin menggunakan plugin, Anda tetap dapat melakukan Test.findByIdAndUpdate(id, { name, nickname }, callback)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dapatkan Sub-Dokumen terbaru dari Array

  2. moveChunk gagal menggunakan TO-shard dalam transfer data:tidak dapat menerima potongan baru karena

  3. Kueri dalam Fungsi Pengurangan Peta MongoDB

  4. Migrasi MongoDB ke DynamoDB, Bagian 1

  5. Gunakan Heroku addon mongolab dengan node.js