MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongodb aggiorna il documento incorporato

Penso che quello che vuoi sia il comando $ addToSet - che spingerà un elemento in un array solo se non esiste già. Ho semplificato un po' il tuo esempio per brevità:

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

Ora esegui:

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

E otteniamo la versione aggiornata:

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

Esegui di nuovo lo stesso comando e il risultato è invariato.

Nota:probabilmente aumenterai questi documenti, specialmente se questo campo è illimitato e causa spostamenti frequenti (relativamente costosi) aggiornando in questo modo:dovresti dare un'occhiata qui per idee su come mitigare questo:

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