我正在使用:
org.springframework.data.mongodb.repository.MongoRepository
我从一个空数据库开始,例如用_id = 1234
创建一个对象,然后将一些其他字符串字段设置为hello
,然后执行:
repository.save(object);
一切都很好,它将文档保存在MondoDB中。
我创建一个新对象,设置相同的_id = 1234
,但将另一个字符串字段设置为world
,然后另一个保存:
repository.save(newObject);
结果:保存有效但更新了原始对象。
预期结果:由于DuplicateKeyException
_id
是唯一的,因此这应该失败,并且我在执行每次保存时使用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)