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