在我的項目有一個結構,如下所示:更新元件不保留其類型
class User {
private List<MapObject> mapObjects;
}
class MapObject {
... some fields...
}
class SubMapObject {
... some additional fields
}
最初,用戶類被填充數據(以及還包括SubMapObject類的實例)從模板,並通過MongoTemplate從Spring集成存儲在MongoDB中,像這樣:
mongoOps.insert(u);
而且在MapObjects的領域每個項目的信息被保留,也是的_class它是什麼。 (在案件時,它的子類)
然後,它涉及到一個地步,我們需要更新用戶的MapObjects的字段中的一個元素。我們這樣做是這樣的:
mongoOps.updateFirst(
query(where("_id").is(userObjectId).and("mapObjects._id")
.is(mo.get_id())), update("mapObjects.$", mo),
User.class);
凡月是SubMapObject例如。
每當有任何子類(MapObject)實例被傳遞時,關於該對象的MongoDB記錄中的哪個類(_class)字段的信息都會丟失,它將被視爲其父對象 - MapObject。因此,我們有以下的問題:)
1)我們從哪裏做錯了,以及如何保持此對象的類的信息? 2)此外,我們想知道更新整個mapObjects字段是否比僅更新其中的特定元素更快(因爲它必須在這種情況下迭代才能找到它)。很可能一個用戶在其mapObjects列表中會有300-400個條目。
看到一個自定義推送實現了同樣的問題。什麼奇怪的是,該對象的字段使用自定義轉換器,但對象本身不保留_class場映射。 –