必要なのは$addToSetコマンドだと思います。これは、要素がまだ存在しない場合にのみ、要素を配列にプッシュします。簡潔にするために、例を少し簡略化しました:
db.meters.findOne()
{
"_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
"config" : {
"someparam" : 4.5
},
"data" : [
{
"Meter" : 123456789,
}
],
"key" : "20120418_123456789"
}
今すぐ実行:
db.meters.update({"key" : "20120418_123456789"}, {"$addToSet": {"data" : {"Meter" : 1234}}})
そして、更新されたバージョンを取得します:
db.meters.findOne()
{
"_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
"config" : {
"someparam" : 4.5
},
"data" : [
{
"Meter" : 123456789,
},
{
"Meter" : 1234
}
],
"key" : "20120418_123456789"
}
同じコマンドを再度実行しても、結果は変わりません。
注:特にこのフィールドに制限がなく、この方法で更新することで頻繁に(比較的高価な)移動を引き起こす場合は、これらのドキュメントを増やす可能性があります。これを軽減する方法については、こちらをご覧ください。
http://www.mongodb.org/display/DOCS/Padding + Factor#PaddingFactor-ManualPadding