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

Spring MongoRepository is updating or upserting instead of inserting

我正在使用 :

org.springframework.data.mongodb.repository.MongoRepository

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

repository.save(object);

一切顺利,它将文档保存在 MondoDB 中。

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

repository.save(newObject);

结果:保存有效但更新了原始对象。

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

缺陷 spring 还是我做错了什么???

Save,根据定义,应该更新 upsert 样式的对象,如果存在则更新,如果不存在则插入。 阅读 save 关于 MongoDb website

的操作文档

mongodb 中的 insert 操作具有您期望的行为,但从 MongoRepository 文档看来,insert 被委托保存,因此它不会做任何区别。但是您可以尝试一下,看看它是否适合您。否则你可以做一个 get before 来检查对象是否存在,因为它是一个索引查找它会很快。

编辑:检查您的存储库版本,插入 是在version 1.7.

中引入的

只有当您为其中一个字段添加了@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.DESCENDING, dropDups=true)