2

私のプロジェクトには、次のような構造があります。

class User {
  private List<MapObject> mapObjects;
}

class MapObject {
  ... some fields...
}

class SubMapObject {
  ... some additional fields
}

最初に、 User クラスはテンプレートからのデータ (および SubMapObject クラスのインスタンスも含む) で満たされ、次のように、Spring 統合から MongoTemplate を介して MongoDB に格納されます。

mongoOps.insert(u);

また、mapObjects フィールドのすべてのエントリの情報が保持され、_class の情報も保持されます。(サブクラスの場合)

次に、User の mapObjects フィールド内の 1 つの要素を更新する必要があります。次のようにします。

mongoOps.updateFirst(
                query(where("_id").is(userObjectId).and("mapObjects._id")
                        .is(mo.get_id())), update("mapObjects.$", mo),
                User.class);

たとえば、 moは SubMapObject です。

(MapObject の) サブクラス インスタンスが渡されるたびに、そのオブジェクトの MongoDB レコード内のどのクラス (_class) フィールドであるかに関する情報が失われ、その親である MapObject のように扱われます。そこで、次の質問があります:)

1) どこで間違っているのか、このオブジェクトのクラスの情報を保存する方法は?

2) さらに、特定の要素のみを更新するよりも mapObjects フィールド全体を更新する方が速いかどうか疑問に思っていました (この場合、それを見つけるために反復する必要があるため)。ほとんどの場合、1 人のユーザーの mapObjects リストには 300 ~ 400 のエントリがあります。

4

1 に答える 1

0

私はこれに出くわし、解決策を管理しました。Spring Data for MongoDB Repository インターフェイスも使用していると思います。その場合は、この関連する質問を参照してください: Spring Data で MongoRepository を使用して $push を行うにはどうすればよいですか? 詳細については。

基本的な考え方は、リポジトリのカスタム クラスを接続したら、最後のステップとして、コンテキストから mongo マッピング コンバーターを注入することです。次に、オブジェクトを渡すのではなく、まずそれを DBObject に変換し、代わりにその DBObject を保存します。コンバーターは、期待どおりに _class フィールドを書き出す必要があります。

于 2013-08-30T16:45:14.093 に答える