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

Pindahkan elemen dari satu larik ke larik lain dalam dokumen yang sama MongoDB

Tidak ada $move di MongoDB . Karena itu, solusi termudah adalah pendekatan 2 fase:

  1. Meminta dokumen
  2. Buat pembaruan dengan $pull dan $push /$addToSet

Bagian penting di sini, untuk memastikan semuanya idempoten, adalah menyertakan dokumen array asli dalam kueri pembaruan.

Diberikan dokumen dengan format berikut:

{
    _id: "foo",
    arrayField: [
        {
            a: 1,
            b: 1
        },
        {
            a: 2,
            b: 1
        }
    ]
}

Katakanlah Anda ingin memindahkan { a: 1, b: 1 } ke bidang yang berbeda, mungkin disebut someOtherArrayField , Anda ingin melakukan sesuatu seperti.

var doc = db.col.findOne({_id: "foo"});
var arrayDocToMove = doc.arrayField[0];
db.col.update({_id: "foo", arrayField: { $elemMatch: arrayDocToMove} }, { $pull: { arrayField: arrayDocToMove }, $addToSet: { someOtherArrayField: arrayDocToMove } })

Alasan kami menggunakan $elemMatch adalah untuk memastikan bahwa bidang yang akan kita hapus dari larik tidak berubah sejak pertama kali kita menanyakan dokumen. Saat digabungkan dengan $pull itu juga tidak sepenuhnya diperlukan, tetapi saya biasanya terlalu berhati-hati dalam situasi ini. Jika tidak ada paralelisme dalam aplikasi Anda, dan Anda hanya memiliki satu instance aplikasi, itu tidak sepenuhnya diperlukan.

Sekarang ketika kami memeriksa dokumen yang dihasilkan, kami mendapatkan:

db.col.findOne()
{
        "_id" : "foo",
        "arrayField" : [
                {
                        "a" : 2,
                        "b" : 1
                }
        ],
        "someOtherArrayField" : [
                {
                        "a" : 1,
                        "b" : 1
                }
        ]
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bergabunglah dengan dua koleksi di MongoDB

  2. Java MongoDB POST:415 jenis media yang tidak didukung

  3. menangani @ dalam string koneksi mongodb

  4. Bagaimana cara menulis kueri untuk mendapatkan nilai berbeda dari koleksi mongodb?

  5. Menyimpan array (dari 'tag') ke MongoDB menggunakan Mongoose