DBCollection保存()在蒙戈3.3当量(DBCollection save() equiv

2019-09-29 19:38发布

我们当前的实现与mongo-java-driver:3.0.4为一个文件更新如下-

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);
}

考虑到来自源的信息DBCollection的保存

  • 如果文档不与指定的“_id”值存在,则该方法执行与文档中的指定字段中的插入件。
  • 如果文档具有指定“_id”值存在,则该方法执行更新,替换与从文档字段现有记录所有字段。

但我怀疑insertOne现在执行我使用它作为对同样的效果save()以前。

插入提供文件。 如果文档丢失的标识符,司机应该产生一个

的问题 -是否有任何方式的类似save()与当前MongoCollection方法? 有没有办法使用的方式_idParam或做不使用它,以及类似的东西?


编辑:帕拉姆被定义为-

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);
  }

}

并具有ParamCodec implements Codec<Param>这是使用登记CodecRegistry如下到客户端:

CodecRegistry codecRegistry = CodecRegistries.fromRegistries(MongoClient.getDefaultCodecRegistry(),
            CodecRegistries.fromCodecs(new ParamCodec()));

MongoClientOptions clientOptions = new MongoClientOptions.Builder()
    ....
    .codecRegistry(codecRegistry)
    .build();

MongoClient(addresses, clientOptions);

Answer 1:

您可能需要使用

findOneAndUpdate(Bson filter, Bson update, FindOneAndUpdateOptions options)

与设置为true UPSERT选项FindOneAndUpdateOptions。

您可以通过_id作为查询过滤器和param为您的更新,并在查询_id匹配将UPSERT的值,如果没有找到匹配它会插入新行。



文章来源: DBCollection save() equivalent in mongo 3.3