sql >> Databáze >  >> NoSQL >> MongoDB

Vložit objekt do pole, pokud pole existuje, jinak pole vytvořte s objektem v MongoDB

Chcete-li zde vysvětlit všechny možné případy, zvažte každý případ dokumentu:

Pokud váš dokument, který chcete změnit, vypadá takto:

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

Pak aktualizujte prohlášení, jako je toto:

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

Výsledky v tomto:

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

Pole je tedy vytvořeno a nová položka připojena.

Pokud váš dokument již má takové pole:

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

A uděláte v podstatě totéž:

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

Poté se obsah nového dokumentu připojí k existujícímu poli:

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

Pokud však váš původní dokument má pojmenované pole, ale není to pole, jako je toto:

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

Poté se ujistěte, že se nejedná o pole testováním v podmínkách dotazu a pomocí $set místo toho:

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

To bezpečně přepíše prvek, který není polem (tečková notace "myArray.0" znamená první prvek pole, což není pravda) novým polem obsahujícím váš obsah. Výsledek je stejný jako originál:

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


  1. Dotaz na vnořené pole v MongoDb

  2. ClusterControl – všechny hlavní funkce a vylepšení od roku 2017

  3. Dotazování na nulovou hodnotu v MongoDB

  4. Synchronizujte MongoDB přes ssh