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

Posisi $ bekerja pada bagian yang berbeda dari dokumen yang sama?

Mengingat Anda berkomentar, Anda tampaknya berada di jalur yang benar. Seperti yang Anda ketahui, posisi $ operator hanyalah wadah "nilai", yang memiliki indeks dari elemen larik pertama yang cocok dengan kueri Anda.

Anda "bisa" gunakan itu jika Anda benar-benar yakin bahwa dua larik Anda selalu berisi jumlah elemen yang sama dan entri yang sesuai ini berada di posisi yang sama setiap saat.

Jadi ya, agar aman, gunakan $elemMatch dengan dua memperbarui operasi seperti itu

db.p.update( { '$and': [ 
  { '_searchData.addressesR': {$elemMatch: { 'street': 'BITTON' } } ] },
  { '$set': {
    '_searchData.addressesR.$.street':'BITTON CHANGED' ,
  }
})

db.p.update( { '$and': [ 
  { '_children.addressesR': {$elemMatch: { 'street': 'Bitton' } } ] },
  { '$set': {
    '_children.addressesR.$.street': 'Bitton CHANGED'
  }
})

Satu-satunya pertimbangan nyata di sini adalah karena dua pembaruan itu mungkin yang dibaca dokumen bisa terjadi di antara pembaruan tersebut dan _searchData . Anda dan _children dokumen tidak akan memiliki sesuai . yang sama entri di addressesR array.

Hal yang sama berlaku dengan replikasi, karena kedua operasi harus diputar ulang oleh node sekunder.

Apa yang akan menjadi fitur yang bagus, adalah dapat menggunakan $elemMatch di update bagian dari kueri Anda. Dengan cara itu Anda akan menanyakan posisi elemen di sisi itu. Tapi ini belum ada belum . Tapi dari 2,6 ke atas Anda bisa lakukan sesuatu seperti ini:

db.runCommand({

    "update": "p",

    "updates": [
        { 
            "q": { '_children.addressesR': {$elemMatch: { 'street': 'Bitton' } },

            "u": { 
                "$set": {
                    "_children.addressesR.$.street": "Bitton CHANGED"
                }
            }
        },
        { 
            "q": { '_searchData.addressesR': {$elemMatch: { 'street': 'BITTON' } },

            "u": { 
                "$set": {
                    "_searchData.addressesR.$.street": "BITTON CHANGED"
                }
            }
        }

    ]
})

Itu tercakup dalam halaman manual di bawah Pembaruan Massal .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jsonify PyMongo dan Flask berisi garis miring

  2. Bagaimana cara membuat indeks teks di mongodb dengan golang dan perpustakaan mgo?

  3. Spring Data Mongo:upsert dengan berbagai bidang diperbarui

  4. Komit dan persistensi disk dalam NoSQL (MongoDB)

  5. Perbarui array di dalam dokumen Mongo tidak berfungsi