1
我們當前的實現與mongo-java-driver:3.0.4
爲一個文件更新如下 -DBCollection保存()相當於蒙戈3.3
private void updateParam(String param1, String param2) {
Param param = new Param(param1, param2);
DBCollection collection = mongoClient.getDB("databaseName").getCollection("collectionName");
collection.save(new BasicDBObject(param.toMap()));
}
其中param.toMap()
實現爲
public Map<String, Object> toMap() {
return JSONObjectMapper.getObjectMapper().convertValue(this, Map.class);
}
隨着mongo-java-driver:3.4.0-rc1
實施我試着用insertOne
作爲
private void updateParam(String param1, String param2) {
Param param = new Param(param1, param2);
MongoCollection<Param> mongoCollection = mongoClient.getDatabase("databaseName").getCollection("collectionName", Param.class);
mongoCollection.insertOne(param);
}
- 信息如果文檔不與指定的「_id」值存在,則 方法執行與文檔中的指定字段中的插入件。
- 如果文檔以指定的_id值存在,則方法 執行更新,將現有記錄中的所有字段替換爲文檔中的字段 。
但是我現在懷疑insertOne實現,我用它來作爲對save()
以前類似的效果。
插入所提供的文檔。如果文檔缺少 標識,駕駛人應生成一個
問題 - 有什麼辦法類似的save()
當前MongoCollection
方法?有沒有辦法使用的Param
_id
或做不使用它,以及類似的方法嗎?
編輯: 帕拉姆被定義爲 -
public class Param {
private String param2;
private String param2;
public Param() {
}
public Param(String param1, String param2) {
this.param1 = param1;
this.param2 = param2;
}
public Map<String, Object> toMap() {
return JSONObjectMapper.getObjectMapper().convertValue(this, Map.class);
}
}
並具有使用CodecRegistry
如下到客戶端註冊的ParamCodec implements Codec<Param>
:
CodecRegistry codecRegistry = CodecRegistries.fromRegistries(MongoClient.getDefaultCodecRegistry(),
CodecRegistries.fromCodecs(new ParamCodec()));
MongoClientOptions clientOptions = new MongoClientOptions.Builder()
....
.codecRegistry(codecRegistry)
.build();
MongoClient(addresses, clientOptions);
如果'Param'沒有一個叫'場什麼_id'? – nullpointer
但你需要一個標識符字段? Mongo怎麼知道什麼時候更新vs保存?或者您可以傳遞任何其他條件,這些條件將解析爲過濾器中的記錄,並基於該條件是否發生匹配更新,如果不是,則會發生插入。 – Veeram