MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Wstaw obiekt do tablicy, jeśli tablica istnieje, w przeciwnym razie utwórz tablicę z obiektem w MongoDB

Aby wyjaśnić wszystkie możliwe przypadki tutaj, rozważ każdy przypadek dokumentu:

Jeśli dokument do zmiany wygląda tak:

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

Następnie komunikat o aktualizacji, taki jak ten:

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

Wyniki w tym:

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

Tak więc tworzona jest tablica i dodawany jest nowy element.

Jeśli twój dokument ma już taką tablicę:

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

I robisz w zasadzie to samo stwierdzenie:

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

Następnie nowa treść dokumentu jest dodawana do istniejącej tablicy:

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

Jeśli jednak oryginalny dokument ma nazwane pole, ale nie jest tablicą, na przykład:

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

Następnie upewnij się, że nie jest to tablica, testując w warunku zapytania i używając $set zamiast tego:

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

Spowoduje to bezpieczne zastąpienie elementu, który nie jest tablicą ( notacja z kropką „myArray.0” oznacza pierwszy element tablicy, co nie jest prawdą ) nową tablicą zawierającą Twoją treść. Wynik jest taki sam jak oryginał:

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak połączyć się z MongoDB za pomocą PhantomJS

  2. Używanie $in w MongooseJS z zagnieżdżonymi obiektami

  3. XML do BSON za pomocą C#

  4. Czy w zapytaniu MongoDB można używać ścisłych dat JSON $dates?

  5. Node.js - czekaj na wiele wywołań asynchronicznych