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

Mongodb upsert osadzony dokument

Myślę, że to, czego potrzebujesz, to polecenie $addToSet - które wypchnie element do tablicy tylko wtedy, gdy jeszcze nie istnieje. Uprościłem nieco twój przykład dla zwięzłości:

db.meters.findOne()
{
    "_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
    "config" : {
        "someparam" : 4.5
    },
    "data" : [
        {
            "Meter" : 123456789,
        }
    ],
    "key" : "20120418_123456789"
}

Teraz uruchom:

db.meters.update({"key" : "20120418_123456789"}, {"$addToSet": {"data" : {"Meter" : 1234}}})

I otrzymujemy zaktualizowaną wersję:

db.meters.findOne()
{
    "_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
    "config" : {
        "someparam" : 4.5
    },
    "data" : [
        {
            "Meter" : 123456789,
        },
        {
            "Meter" : 1234
        }
    ],
    "key" : "20120418_123456789"
}

Uruchom ponownie to samo polecenie, a wynik pozostanie niezmieniony.

Uwaga:prawdopodobnie będziesz rozwijać te dokumenty, zwłaszcza jeśli to pole jest nieograniczone i powoduje częste (stosunkowo drogie) ruchy poprzez aktualizację w ten sposób - powinieneś zajrzeć tutaj, aby znaleźć pomysły, jak to złagodzić:

http://www.mongodb.org/display/DOCS/Padding +Factor#PaddingFactor-ManualPadding




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Gdzie jest baza danych meteor MongoDB?

  2. Dziwne wyniki z mongoid przy użyciu Debian squeeze mongodb

  3. Czym jest tryb ścisły MongoDB i czy warto go używać?

  4. MongoDB - Użyj struktury agregacji lub mapreduce do dopasowania tablicy ciągów w dokumentach (dopasowanie profilu)

  5. Odwołanie zwrotne Node.js z aktualizacją MongoDB nigdy nie zwraca, chociaż aktualizuje bazę danych