Creo que lo que quiere es el comando $addToSet, que empujará un elemento a una matriz solo si aún no existe. He simplificado un poco tu ejemplo por brevedad:
db.meters.findOne()
{
"_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
"config" : {
"someparam" : 4.5
},
"data" : [
{
"Meter" : 123456789,
}
],
"key" : "20120418_123456789"
}
Ahora ejecuta:
db.meters.update({"key" : "20120418_123456789"}, {"$addToSet": {"data" : {"Meter" : 1234}}})
Y obtenemos la versión actualizada:
db.meters.findOne()
{
"_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
"config" : {
"someparam" : 4.5
},
"data" : [
{
"Meter" : 123456789,
},
{
"Meter" : 1234
}
],
"key" : "20120418_123456789"
}
Vuelva a ejecutar el mismo comando y el resultado no cambiará.
Nota:es probable que haga crecer estos documentos, especialmente si este campo no está delimitado y provoca movimientos frecuentes (relativamente costosos) al actualizar de esta manera; debe consultar aquí para obtener ideas sobre cómo mitigar esto:
http://www.mongodb.org/display/DOCS/Padding +Factor#PaddingFactor-ManualPadding