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

Mongodb upsert vložený dokument

Myslím, že to, co chcete, je příkaz $addToSet - který vloží prvek do pole, pouze pokud ještě neexistuje. Pro stručnost jsem váš příklad trochu zjednodušil:

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

Nyní spusťte:

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

A dostáváme aktualizovanou verzi:

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

Spusťte znovu stejný příkaz a výsledek se nezmění.

Poznámka:Pravděpodobně budete tyto dokumenty rozšiřovat, zvláště pokud je toto pole neomezené a způsobuje časté (relativně nákladné) přesuny aktualizací tímto způsobem – měli byste se podívat sem, kde najdete nápady, jak to zmírnit:

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




  1. Úvod do Apache HBase Snapshots

  2. mongo dotaz - existuje vlastnost?

  3. Chyba neplatného id kurzoru mongodb

  4. pomocí secureIndex ve schématu mongodb pomocí mongoose