我用的是:

org.springframework.data.mongodb.repository.MongoRepository

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

repository.save(object);

一切都很好,它将文件保存在MondoDB中.

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

repository.save(newObject);

结果:保存有效,但会更新原始对象.

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

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

推荐答案

根据定义,Save应该更新upsert样式中的对象,如果存在则更新,如果没有则插入.

mongodb中的insert操作具有您期望的行为,但从MongoRepository文档来看,insert似乎被授权保存,因此不会产生任何影响.但你可以试试看它是否适合你.否则,您可以只做一个get-before来判断对象是否存在,因为它是一个索引查找,所以速度会很快.

Edit:判断你的存储库版本,insert是在version 1.7年引入的.

Mongodb相关问答推荐

MongoDB:就地分组嵌套数组的元素

如何在Mongo中制作全覆盖索引

在MongoDB集合中按文档内的频率对数组排序

在服务器上部署后端时判断??=默认判断

聚合管道可以用于更新数据库中的文档吗?

_id 和 $oid 的区别; mongo 数据库中的 $date 和 IsoDate

使用 mongodb 时是否需要规范化数据库?

mongoose中的 required是什么意思?

使用 mgo 从 golang 中的 Mongodb 中 Select 列

更新文档中的数组时,如何在 MongoDB 和 C# 中使用 $push 更新修饰符

什么是 Mongoose (Nodejs) 复数规则?

`fields cannot be identical'和''` mongoimport错误

为什么使用 Redis 而不是 MongoDb 进行缓存?

如何在 MongoDB 聚合查询中使用 $hint?

移动 MongoDB 的数据文件夹?

如何使用服务器实例指定 mongodb 用户名和密码?

在 MongoDB 中为现有用户更改密码

从 mongo 结果中删除 _id

MongoDB 连接字符串到副本集

Meteor 发布/订阅独特客户端集合的策略