«前の日記(2014-04-19) 最新 次の日記(2014-10-29)» 編集

ぱぱネット(仮)


2014-05-08 MongoDBのupdateに気をつけろ [長年日記]

_ [開発][Linux] MongoDBのupdateに気をつけろ

久々に超初歩的なミスをやってしまいました....

ドキュメント指向データベースのMongoDBはJSON(BJSON)のドキュメントをそのまま格納できます。

> db.col.save({ _id:123, text:'hoge', lat:35, lon:139 });
> db.col.save({ _id:456, text:'piyo', lat:36, lon:141 });

こんな感じでそのまま入っている。

> db.col.find();
  { "_id" : 123, "text" : "hoge", "lat" : 35, "lon" : 139 }
  { "_id" : 456, "text" : "piyo", "lat" : 36, "lon" : 141 }

ここで特定のカラムのみを書き換えたい場合はupdateコマンドと$setオペレータを使います。

> db.col.update({_id:456}, {$set:{text:'aho'}}, { multi: false, upsert: false });

こうすればちゃんと変更される。

> db.col.find();
  { "_id" : 123, "text" : "hoge", "lat" : 35, "lon" : 139 }
  { "_id" : 456, "text" : "aho", "lat" : 36, "lon" : 141 }

しかし!この$setを省略してしまうと....

> db.col.update({_id:456}, {text:'aho'}, { multi: false, upsert: false });
> db.col.find();
  { "_id" : 123, "text" : "hoge", "lat" : 35, "lon" : 139 }
  { "_id" : 456, "text" : "aho" }

キエタ\(^o^)/キエタ

これは結果的に _id:456の指し示すドキュメントをtext:'aho'に置き換えた ということ。 だからデータが消える...この操作を580万件中7万件に適用して、データを欠けさせたのが、私です(死)。

本日のリンク元

2001|04|
2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|03|04|05|10|

[BANNER]
このサーバーをもう12年も維持しているかと思うとめまいがしますよ。
ツッコミ機能は、ハンドル名が完全日本語じゃないと登録できません。
また、本文にURLが含まれていても登録できません。
いずれもSPAM対策です。
[Panda Papanda]
2014年
5月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

[Papanda]  [Kuma]  [Tomorin]  [Iron]  [Eiza]  [Dokkin]  [Honya]  [Zyou]  [Tsuyo]  [Bike]  [KoeBBS]  [Chukei]  [portal]  [tvmatome]  [KaoPaku] 

訪問者数:(11777+2560143)