Sebelum luwak 4.x, di update(), Anda dapat memeriksa parameter ke-2 di callback untuk melihat apakah dokumen ditemukan. Pada contoh di bawah, Anda dapat menggunakan "rowAffected" untuk melihat apakah ada dokumen dengan nama pengguna john.

model.update({ username: "john" }, { ... }, function(err, rowAffected){ 
    if (rowAffected) // document found

Tapi sekarang dari luwak 4.x, parameter ke-2 dalam panggilan balik menjadi keluaran mentah MongoDB dari operasi pembaruan. Jadi untuk mengetahui apakah dokumen ada, saya harus melakukan raw.n

model.update({ username: "john" }, { ... }, function(err, raw){ 
    if (raw.n) // document found

Pertanyaan saya adalah apakah "rowAffected" dan "raw.n" adalah hal yang sama? Jika demikian, apakah aman untuk mengganti semua rowAffected oleh raw.n saat bermigrasi dari 3.x ke 4.x?

4
Maria 18 Mei 2015, 05:40

1 menjawab

Jawaban Terbaik

Ya, mereka adalah hal yang sama. Menurut 4.0 catatan rilis:

#2552: Mengupgrade driver mongodb ke 2.0.x. Mongoose adalah lapisan pembungkus di atas driver node MongoDB. Driver mongodb baru-baru ini merilis versi 2.0, yang mencakup banyak kinerja dan peningkatan kegunaan. Pengemudi baru, bagaimanapun, memperkenalkan beberapa perubahan yang memengaruhi cara Anda menggunakan Mongoose:

  • Jika Anda terhubung ke set replika, Anda harus menentukan opsi replicaSet di tali koneksi.
  • update mengembalikan objek hasil dari MongoDB server, bukan hanya nomor yang terpengaruh. Parameter kedua untuk panggilan balik sekarang akan terlihat seperti { ok: 1, n: 3 } bukan hanya jumlah yang terpengaruh.
3
victorkt 18 Mei 2015, 06:16