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

Bidang penghitungan otomatis di mongodb

MongoDB tidak dapat membuat apa yang Anda minta dengan 1 kueri. Namun Anda dapat membuatnya dalam kueri dua langkah.

Pertama-tama, masukkan nilai baru ke dalam array:

db.Test3.findOneAndUpdate(
{_id: ObjectId("58047d0cd63cf401292fe0ad")},
{$push: {"items":  {"date": ISODate("2013-01-27T16:38:16.163+0000")}}},
{returnNewDocument: true},
function (err, result) {

}
);

lalu perbarui "lastDate" hanya jika kurang dari yang terakhir Didorong.

  db.Test3.findOneAndUpdate (
   {_id: ObjectId("58047d0cd63cf401292fe0ad"), "lastDate":{$lt: ISODate("2013-01-25T16:38:16.163+0000")}},
   {$set: {"lastDate": ISODate("2013-01-25T16:38:16.163+0000")}},
   {returnNewDocument: true},
   function (err, result) {
   }
  ); 

parameter kedua "lastDate" diperlukan untuk menghindari kondisi balapan. Dengan cara ini Anda dapat yakin bahwa di dalam "lastDate" pasti ada "tanggal tertinggi yang didorong".

Terkait dengan masalah kedua yang Anda minta, Anda dapat mengikuti strategi serupa. Perbarui {"allAre": false} hanya jika {"_id":yourID, "items.is":false)} . Pada dasarnya set "false" hanya jika beberapa anak memiliki nilai 'false'. Jika Anda tidak menemukan dokumen dengan properti ini, jangan perbarui apa pun.

// add a new Child to false
db.Test4.findOneAndUpdate(
{_id: ObjectId("5804813ed63cf401292fe0b0")},
{$push: {"items":  {"is": false}}},
{returnNewDocument: true},
 function (err, result) {

}
);

// update allAre to false if some child is false
db.Test4.findOneAndUpdate (
   {_id: ObjectId("5804813ed63cf401292fe0b0"), "items.is": false},
   {$set: {"allAre": false}},
   {returnNewDocument: true},
   function (err, result) {
   }
  ); 



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Spring boot mencoba terhubung ke mongo saat menambahkan ketergantungan maven mongo-Java-driver

  2. Luwak tidak membuat subdokumen dari array JSON

  3. Bagaimana cara saya melakukan lebih dari/kurang dari menggunakan MongoDB?

  4. Penggunaan execPopulate()

  5. Java, MongoDB:Bagaimana cara memperbarui setiap objek sambil mengulangi koleksi besar?