私のプロジェクトには、次のような構造があります。
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 のエントリがあります。