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

时间:2015-03-13 13:03:42

标签: java spring mongodb spring-data

我正在使用:

org.springframework.data.mongodb.repository.MongoRepository

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

repository.save(object);

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

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

repository.save(newObject);

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

预期结果:由于DuplicateKeyException _id是唯一的,因此这应该失败,并且我在执行每次保存时使用2个单独的对象。

春天的缺陷还是我做错了什么?

2 个答案:

答案 0 :(得分:28)

根据定义,

保存应该更新upsert样式中的对象,如果存在则更新,如果不存在则更新。 阅读MongoDb website

上的save操作文档

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

答案 1 :(得分: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.DESCENDING,dropDups = true)