MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Schieben Sie das Objekt in das Array, wenn das Array vorhanden ist, erstellen Sie andernfalls das Array mit dem Objekt in MongoDB

Um hier alle möglichen Fälle zu erklären, betrachten Sie jeden Dokumentenfall:

Wenn Ihr zu änderndes Dokument so aussieht:

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

Dann eine Update-Anweisung wie diese:

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

Ergebnisse in diesem:

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

Also wird das Array erstellt und das neue Element angehängt.

Wenn Ihr Dokument bereits ein Array wie dieses hat:

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

Und Sie tun im Grunde die gleiche Aussage:

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

Dann wird der neue Dokumentinhalt an das bestehende Array angehängt:

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

Wenn Ihr Originaldokument jedoch das benannte Feld hat, aber kein Array ist, wie hier:

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

Stellen Sie dann sicher, dass es sich nicht um ein Array handelt, indem Sie die Abfragebedingung testen und verwenden $set stattdessen:

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

Dadurch wird das Element, das kein Array ist (Punktnotation "myArray.0" bedeutet erstes Array-Element, was nicht wahr ist), sicher mit einem neuen Array überschrieben, das Ihren Inhalt enthält. Das Ergebnis ist dasselbe wie das Original:

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