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

Proyek MongoDB memperbarui catatan dalam array bersarang di kueri findAndModify

Anda juga dapat mencoba positional $ operator yang digunakan dengan findAndModify() metode. Operator akan mengidentifikasi elemen dalam array untuk diperbarui tanpa secara eksplisit menentukan posisi elemen dalam array. Catatan, bidang array harus muncul sebagai bagian dari dokumen kueri dan untuk mengembalikan dokumen dengan modifikasi yang dibuat pada pembaruan, gunakan opsi baru, sehingga pembaruan Anda akan seperti

db.tests.findAndModify({
    query: {
        "arr.cond": 4
    },
    update: {
        "$set": {"arr.$.upd": 55 }
    },
    new : true,
    fields: { "arr": 1, "_id": 0 }   
})

akan menghasilkan output:

{
    "arr": [
        {
            "cond" : 1,
            "upd" : 2
        },
        {
            "cond" : 2,
            "upd" : 3
        },
        {
            "cond" : 4,
            "upd" : 55
        },
        {
            "cond" : 6,
            "upd" : 7
        },
        {
            "cond" : 8,
            "upd" : 9
        }
    ]
}

Karena Anda ingin mengembalikan dokumen yang diperbarui, dengan proyeksi posisi $ projection operator hanya dapat digunakan dalam dokumen proyeksi find() metode atau findOne() metode sehingga findAndModify() field opsi tidak akan memproyeksikan bagian larik tersebut menggunakan $ projection operator.

Solusinya adalah dengan menggunakan JavaScript asli filter() metode pada bidang arr yang dikembalikan sebagai

var result = db.tests.findAndModify({
    query: {
        "arr.cond": 4
    },
    update: {
        "$set": {"arr.$.upd": 55 }
    },
    new : true,
    fields: { "arr": 1, "_id": 0 }   
})

var updated = []
if (result && result.arr) updated = result.arr.filter(function (item) { return item.cond == 4; });
printjson(updated);

Ini akan mencetak

[ { "cond" : 4, "upd" : 55 } ]

-- PERBARUI --

Atau $elemMatch proyeksi seperti yang Anda sarankan di komentar di bawah:

var result = db.tests.findAndModify({
    query: {
        "arr.cond": 4
    },
    update: {
        "$set": {"arr.$.upd": 55 }
    },
    new : true,
    fields: {"arr": {"$elemMatch": { "cond": 4 } }, "_id": 0 }   
})

printjson(result);

Keluaran :

{ "arr" : [ { "cond" : 4, "upd" : 55 } ] }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Luwak mengembalikan [Objek] alih-alih dokumen tertanam yang sebenarnya

  2. Hapus elemen dari array bersarang mongodb

  3. Tutorial dasar-dasar MongoDB

  4. MongoConnectionException - Tidak ada kandidat server yang ditemukan

  5. Konfigurasikan Mongo menggunakan mongodb+srv