sql >> Databasteknik >  >> NoSQL >> MongoDB

Skjut objekt in i arrayen om arrayen finns, annars skapa arrayen med objekt i MongoDB

För att förklara alla möjliga fall här, överväg varje dokumentärende:

Om ditt dokument som ska ändras ser ut så här:

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

Sedan en uppdatering så här:

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

Resultat i detta:

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

Så arrayen skapas och det nya objektet läggs till.

Om ditt dokument redan har en sådan array:

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

Och du gör i princip samma uttalande:

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

Sedan läggs det nya dokumentinnehållet till den befintliga arrayen:

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

Om däremot ditt originaldokument har det namngivna fältet men det inte är en array, så här:

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

Se sedan till att det inte är en array genom att testa i frågevillkoren och använda $set istället:

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

Det kommer säkert att skriva över elementet som inte är en array (punktnotation "myArray.0" betyder första array-elementet, vilket inte är sant ) med en ny array som innehåller ditt innehåll. Resultatet är detsamma som originalet:

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


  1. Kontrollera om MongoDB upsert gjorde en infogning eller en uppdatering

  2. Torkar upp en generisk RedisTemplate våren 4

  3. Hur man använder GridFS för att lagra bilder med Node.js och Mongoose

  4. Analysera serversäkerhet