Jag tror att det du vill ha är kommandot $addToSet - som kommer att skicka ett element till en array endast om det inte redan finns. Jag har förenklat ditt exempel lite för korthetens skull:
db.meters.findOne()
{
"_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
"config" : {
"someparam" : 4.5
},
"data" : [
{
"Meter" : 123456789,
}
],
"key" : "20120418_123456789"
}
Kör nu:
db.meters.update({"key" : "20120418_123456789"}, {"$addToSet": {"data" : {"Meter" : 1234}}})
Och vi får den uppdaterade versionen:
db.meters.findOne()
{
"_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
"config" : {
"someparam" : 4.5
},
"data" : [
{
"Meter" : 123456789,
},
{
"Meter" : 1234
}
],
"key" : "20120418_123456789"
}
Kör samma kommando igen och resultatet är oförändrat.
Notera:du kommer sannolikt att utöka dessa dokument, särskilt om det här fältet är obegränsat och orsakar frekventa (relativt dyra) flyttningar genom att uppdatera på detta sätt - du bör titta här för idéer om hur du kan mildra detta:
http://www.mongodb.org/display/DOCS/Padding +Factor#PaddingFactor-ManualPadding