Spring MongoRepository正在更新或更新插入而不是插入

2022-09-01 09:39:03

我正在使用 :

org.springframework.data.mongodb.repository.MongoRepository

我从一个空的数据库开始,例如创建一个对象,并将其他一些字符串字段设置为例如,然后执行以下操作:_id = 1234hello

repository.save(object);

一切都很好,它将文档保存在MondoDB中。

我创建了一个新对象,设置相同,但将另一个字符串字段设置为,然后到另一个保存:_id = 1234world

repository.save(newObject);

结果:保存工作,但更新原始对象。

预期结果:这应该失败,因为 as 是唯一的,并且我在每次保存时使用 2 个单独的对象。DuplicateKeyException_id

春天的缺陷,或者我做错了什么???


答案 1

根据定义,Save 应该更新 upsert 样式中的对象,如果存在则更新,如果不存在,则插入。阅读 MongoDb 网站上的操作文档save

mongodb 中的 insert 操作具有您期望的行为,但从 MongoRepository 文档中可以看出,插入操作被委派来保存,因此它不会有任何区别。但是你可以试一试,看看它是否适合你。否则,您可以在之前执行get来检查对象是否存在,因为它是索引查找,因此速度很快。

编辑:检查您的存储库版本,插入是在1.7版本中引入的。


答案 2

只有在您为其中一个字段@Id注释之后,应用程序才会更新,经过长时间的困难发现

@Document(collection="bus")
public class Bus {

//  @Indexed(unique=true, direction=IndexDirection.DESCENDING, dropDups=true)
    @Id
    private String busTitle; 
    private int totalNoOfSeats;
    private int noOfSeatsAvailable; 
    private String busType; 
}

但不知何故,我无法使用@Indexed(unique=true, direction=IndexDirection.DOWNING, dropDups=true)