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

Dorong objek ke dalam array jika array ada jika tidak, buat array dengan objek di MongoDB

Untuk menjelaskan semua kemungkinan kasus di sini, pertimbangkan setiap kasus dokumen:

Jika dokumen Anda untuk diubah terlihat seperti ini:

{
    "_id": "efgh",
    "name": "Jerry"
}

Kemudian update statment seperti ini:

db.collection.update(
    { "_id": "efgh" },
    { "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
)

Hasil dalam ini:

{
    "_id": "efgh",
    "name": "Jerry",
    "myArray": [
        {
            "field1": "abc",
            "field2": "def"
        }
    ]
}

Jadi array dibuat dan item baru ditambahkan.

Jika dokumen Anda sudah memiliki array seperti ini:

{
    "_id": "abcd",
    "name": "Tom",
    "myArray": [
        {
            "field1": "",
            "field2": ""
        }
    ]
}

Dan pada dasarnya Anda melakukan pernyataan yang sama:

db.collection.update(
    { "_id": "abcd" },
    { "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
)

Kemudian konten dokumen baru ditambahkan ke larik yang ada:

{
    "_id": "abcd",
    "name": "Tom",
    "myArray": [
        {
            "field1": "",
            "field2": ""
        },
        {
            "field1": "abc",
            "field2": "def"
        }
    ]
}

Namun jika dokumen asli Anda memiliki bidang bernama tetapi bukan array, seperti ini:

{
    "_id": "efgh",
    "name": "Jerry",
    "myArray": 123
}

Kemudian pastikan itu bukan array dengan menguji dalam kondisi kueri dan menggunakan $set sebagai gantinya:

db.collection.update(
    { "_id": "efgh", "myArray.0": { "$exists": false } },
    { "$set": { "myArray": [{ "field1": "abc", "field2": "def" }] } }
)

Itu akan dengan aman menimpa elemen yang bukan array ( notasi titik "myArray.0" berarti elemen array pertama, yang tidak benar ) dengan array baru yang berisi konten Anda. Hasilnya sama dengan aslinya:

{
    "_id": "efgh",
    "name": "Jerry",
    "myArray": [
        {
            "field1": "abc",
            "field2": "def"
        }
    ]
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apakah mungkin untuk memiliki kondisi pada populasi luwak?

  2. cara memasukkan nomor peningkatan otomatis dengan koleksi luwak saya

  3. Pengecualian Mongo

  4. Gabungkan $lookup dengan C#

  5. MongoDB:migrasi skema, perbarui, atau sisipkan