MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Поставете обект в масив, ако масивът съществува, в противен случай създайте масива с обект в MongoDB

За да обясните всички възможни случаи тук, разгледайте всеки документ:

Ако вашият документ за промяна изглежда така:

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

След това изявление за актуализиране като това:

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

Резултатът е следният:

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

Така че масивът е създаден и новият елемент е добавен.

Ако вашият документ вече има масив като този:

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

И правите основно същото твърдение:

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

След това новото съдържание на документа се добавя към съществуващия масив:

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

Ако обаче вашият оригинален документ има именуваното поле, но не е масив, като това:

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

След това се уверете, че не е масив, като тествате в условието за заявка и използвате $set вместо това:

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

Това безопасно ще презапише елемента, който не е масив (нотация с точка "myArray.0" означава първи елемент от масив, което не е вярно) с нов масив, съдържащ вашето съдържание. Резултатът е същият като оригинала:

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Извикайте съхранена функция на Mongodb от PHP7

  2. mongoose поддържа ли виртуални полета в select като SQL

  3. Целостта на данните на MongoDB

  4. Как да експортирате сортирани данни с помощта на mongoexport?

  5. Добавете нов атрибут към съществуващ json обект в node.js