久々に超初歩的なミスをやってしまいました....
ドキュメント指向データベースの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" }
これは結果的に _id:456の指し示すドキュメントをtext:'aho'に置き換えた ということ。 だからデータが消える...この操作を580万件中7万件に適用して、データを欠けさせたのが、私です(死)。
![[BANNER]](../image/banner.png)