在我的项目中有这样的结构:
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 字段中的单个元素。我们这样做:
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 字段是否比仅更新其中的特定元素更快(因为在这种情况下它必须迭代才能找到它)。一个用户很可能在其 mapObjects 列表中有 300-400 个条目。