如何在创建过程中忽略那些已经在集合中的实体,并在MongoDb中只添加新实体



您好。有必要从实体列表中只插入那些新实体,而不更新现有实体。

如何在创建过程中忽略集合中已经存在的实体,并使用Spring只添加新实体。

我如下解决了这个问题:

使用以下方法:

com.mongodb.client.MongoCollection # insertMany (java.util.List <? extends TDocument>, com.mongodb.client.model.InsertManyOptions)

订单标志一起使用的选项-false

new InsertManyOptions().ordered(false)

详细信息:

实体List需要转换为<org.bson.Document>,然后在请求中使用。因此,请求将如下所示:

public void createOnlyNew(List<Document> list) {
InsertManyOptions insertManyOptions = new InsertManyOptions().ordered(false);
try {
mongoTemplate.getCollection("name_of_collection").insertMany(list, insertManyOptions);
} catch (MongoBulkWriteException ignore) {
}
}

由于此请求,将只添加新实体,而数据库中的现有实体将保持不变。

一个重要的细节是:如果mongo与现有实体发生冲突,将抛出com.mongodb.MongoBulkWriteException。因此,我将请求封装在try-catch块中以忽略此异常。需要注意的是,如果在事务性方法内部调用此请求(例如,用org.springframework.transaction.annation.transactional注释标记(,则该事务将被视为已完成并出现错误。

最新更新