1

新しいレコードがmongodbのモルヒネを使用した一意キー制約に違反している場合、元のレコードを新しいレコードに置き換える方法はありますか?

morphiaの場合、object_idはデータベースに保存されるまでnullであり、別のフィールドのために一意キー制約が生成された場合、新しいレコードのobject_idと元のレコードが異なるため、アップサートを実行できません。記録。

dbから元のレコードを検索したくありませんが、新しいレコードが一意のキー制約を作成する場合はそれを上書きするだけです。これを行う方法はありますか?

4

1 に答える 1

0

私は3つの可能なアプローチがあると思います:

  1. 一意の要素のObjectIdを取得し、それを新しいドキュメントに追加して保存します。ObjectIdを再利用しているため、古い要素は上書きされます。ただし、これには1つではなく2つのクエリが必要です。

  2. 更新クエリを作成します。クエリ部分は一意の属性をチェックし、変更するすべての属性を明示的に設定します。これは次のように機能します。

    Query<User> updateQuery = datastore.createQuery(User.class)
        .field("userId").equal("foo");
    ops = datastore.createUpdateOperations(User.class).set("firstName", "bar");
    datastore.update(updateQuery, ops);
    
  3. @Idアノテーションを介してIDとして一意の属性を使用します。ただし、いくつかの(マイナーな)欠点があります:https ://groups.google.com/forum/#!msg / morphia / GQLJywseiCM / 6DVkYX17P68J

オプション2を使用します。

于 2012-12-25T21:40:20.847 に答える