2017-08-07 3 views
2

Morphiaを使用してMongoに文書をアップデートしました。Morphia Upsertingフィールドがin32の代わりにint64として

私はint32として保存したいフィールドを持っていますが、upsertの後にはint64として挿入されます。

Long.intValue()を使用してlong型をint型に変換し、Morphiaが直列化したオブジェクトをメンバー型フィールドintに変換していることを確認しました。私はまた、どのモーフィアがアップセッティングしているかを見るためにUpdateOperations.opsをチェックしました。

アップサート操作は次のとおりです。

UpdateOperations<Test> ops = datastore.createUpdateOperations(Test.class) 
    .set("test_field", testField.intValue()) 

私が使用していますモンゴの現在のバージョンは3.0です。

助けていただけたら幸いです!

ありがとうございます!

EDIT: それはMorphiaで更新クエリ操作を見て:私は解決策を見つけるために管理

{$set={test_field=11}} 
+0

完全な例を追加できますか?データベースでInt64であることをどのように確認していますか?シェルで 'db.collection_name.find({" test_field ":{$ type:18}})'を実行できますか? – Veeram

+0

'db.collection_name.find({" test_field ":{$ type:18}})'は自分のコレクションにある唯一のドキュメントを返します。また、ドキュメント内の各フィールドのタイプを確認するRobomongoも使用しています。 インデックスが値を保持していないことを確認するためにコレクションを削除しました – diepjy

+0

また、JSONにドキュメントのチェックを行いました。フィールドには「test_field」があります:NumberLong(1) – diepjy

答えて

0

。 upsertのクエリは、test_fieldをintではなくlongとしてクエリしていました。 Mongo 3.0ではこれを挿入する型とみなしていますが、Mongo 3.2では動作しますが、問題はなく、upsert操作で指定された型でアップグレードします。

関連する問題