sql >> Database >  >> NoSQL >> MongoDB

Duw object in array als de array bestaat, maak anders de array met object in MongoDB

Om alle mogelijke gevallen hier uit te leggen, bekijkt u elk documentgeval:

Als uw te wijzigen document er als volgt uitziet:

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

Dan een update-verklaring als deze:

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

Resultaten in dit:

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

Dus de array wordt gemaakt en het nieuwe item wordt toegevoegd.

Als uw document al zo'n array heeft:

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

En je doet in principe dezelfde uitspraak:

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

Vervolgens wordt de nieuwe documentinhoud toegevoegd aan de bestaande array:

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

Als uw originele document echter het genoemde veld heeft, maar het is geen array, zoals dit:

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

Zorg er vervolgens voor dat het geen array is door te testen in de queryvoorwaarde en te gebruiken $set in plaats daarvan:

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

Dat zal het element dat geen array is (puntnotatie "myArray.0" betekent eerste array-element, wat niet waar is) veilig overschrijven met een nieuwe array die uw inhoud bevat. Het resultaat is hetzelfde als het origineel:

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


  1. Dus... dit NoSQL-ding

  2. sorteer op datum met geaggregeerd verzoek in mongodb

  3. Vreemde reactie bij het vinden van documenten in MongoDB met Mongoose in Node.js

  4. Mongodb - regex match van sleutels voor subdocumenten