MongoDBのUpdateでの"right object doesn't have full shard key"なエラーが出た
ギョームでモンゴーデービーをジャッヴァと共に使っていたときにハマった問題について。
とある環境でまったく問題はありませんでした。
しかし環境を変えた瞬間、
right object doesn't have full shard key
頑張って唸りながら調べるとこれくらいしか記事が見つからず。
Can not update document without sharding key
確かにログを見てる限り、Insert時はエラーなし、Update時にエラーという感じ。
要するにシャーディングされているmongodbでは、update時に全てのShardに対してアップデートをかける必要がある。ってこと。
最初の環境のmongodbはテスト環境なのでシャーディングされておらず問題は発覚しなかったというわけ。
Javaで使うときは第4引数をtrueにして実行しようね
http://api.mongodb.org/java/current/com/mongodb/DBCollection.html#update(com.mongodb.DBObject, com.mongodb.DBObject, boolean, boolean)
dbcollection.update(query,object,false,true);
最近はupdateMulit()なんてメソッドもあるみたいだけど
http://api.mongodb.org/java/current/com/mongodb/DBCollection.html#updateMulti(com.mongodb.DBObject, com.mongodb.DBObject)
まーテスト環境と他の環境でミドルウェアの構造が違うと思わぬところでハマって死ぬといういい経験をしました。