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

MongoDB $maks

MongoDB memiliki $max operator yang memungkinkan Anda memperbarui nilai bidang hanya jika nilai yang ditentukan lebih besar dari nilai bidang saat ini.

Dengan kata lain, jika $max nilai lebih besar dari nilai saat ini dalam dokumen, $max nilai digunakan. Jika tidak, nilai dokumen tetap tidak berubah.

Contoh

Misalkan kita memiliki koleksi seperti ini:

{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 230 }
{ "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
{ "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

Dan bayangkan kami memperbarui koleksi setelah setiap latihan tanpa lift terbaru. Dalam hal ini, kami hanya menginginkan bestLift lapangan akan diperbarui jika lift terbaru kami lebih berat dari lift terbaik kami sebelumnya (yaitu berat saat ini yang tercantum untuk masing-masing lift).

Dalam hal ini kita bisa menggunakan $max operator untuk mencapai hasil tersebut.

Contoh:

db.workout.update( 
  { _id: 1 }, 
  { $max: { bestLift: 240 } } 
)

Keluaran:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Pesan ini memberi tahu kami bahwa satu dokumen cocok dan telah diperbarui.

Yuk cek lagi koleksinya.

db.workout.find()

Hasil:

{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 240 }
{ "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
{ "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

Kita dapat melihat bahwa bestLift bidang untuk dokumen pertama telah diperbarui dengan nilai baru. Ini karena 240 lebih tinggi dari nilai sebelumnya yaitu 230.

Saat Nilai Lebih Rendah

Ketika nilai ditentukan dengan $max lebih rendah dari nilai yang ada dalam dokumen, tidak ada yang diperbarui.

Contoh:

db.workout.update( 
  { _id: 1 }, 
  { $max: { bestLift: 220 } } 
)

Keluaran:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

Kami dapat melihat dari pesan bahwa tidak ada yang diperbarui.

Yuk cek lagi koleksinya.

db.workout.find()

Hasil:

{ "_id" : 1, "exercise" : "deadlift", "bestLift" : 240 }
{ "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
{ "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

Kita dapat melihat bahwa nilainya tetap pada 240, meskipun kita mencoba untuk memperbaruinya menjadi 220. Hal ini diharapkan, karena kita menggunakan $max .

Tanggal

Anda dapat menggunakan $max pada bidang tanggal.

Misalkan kita memiliki collection disebut langganan dengan dokumen berikut:

{ "_id" : 1, "expiry" : ISODate("2021-01-01T00:00:00Z") } 

Mari kita coba perbarui tanggal dengan tanggal yang lebih awal dari tanggal saat ini di dokumen.

db.subscriptions.update( 
  { _id: 1 }, 
  { $max: { expiry: new Date("2020-01-01") } } 
)

Di sini, kami mencoba memperbarui tahun dari 2021 ke 2021 . Mengingat tanggal baru lebih awal dari yang sudah ada, kami mendapatkan yang berikut.

db.subscriptions.find()

Hasil:

{ "_id" : 1, "expiry" : ISODate("2021-01-01T00:00:00Z") }

Seperti yang diharapkan, tidak ada yang diperbarui.

Mari kita coba memperbaruinya di lain waktu.

db.subscriptions.update( 
  { _id: 1 }, 
  { $max: { expiry: new Date("2022-01-01") } } 
)

Keluaran:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Kita dapat melihat dari pesan bahwa dokumen telah diperbarui.

Mari kita periksa.

db.subscriptions.find()

Hasil:

{ "_id" : 1, "expiry" : ISODate("2022-01-01T00:00:00Z") }

Tanggal diperbarui seperti yang diharapkan.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $filter di dalam $project MongoDB Menggunakan Data Musim Semi

  2. Pencarian Kabur dengan Mongodb?

  3. Apakah ada cara untuk mencegah MongoDB menambahkan bentuk jamak ke nama koleksi?

  4. Bagaimana saya bisa meng-host Server Parse saya sendiri di Heroku menggunakan MongoDB?

  5. Hapus bidang dari semua elemen dalam array di mongodb