标签:其他 重复数据 成功 error ESS save 数据库 插入 index
db.room.ensureIndex({‘floor‘:1,‘num‘:1})
@Data // lombok
@Document(collection = "room")
@CompoundIndexes({
// 唯一复合索引:楼层和房号不能相同,不然就是同一个房间了
@CompoundIndex(name = "floor_num", def = "{‘floor‘ : 1, ‘num‘: 1}",unique=true)
})
public class Room {
@Id
private String id;
// 楼层
private int floor;
// 房号
private int num;
// 建造时间
private Date createAt;
}
可以,mongodb存储的是时间戳,实际上转换成数字进行复合比较的。
> [Error] index 0: 11000 - E11000 duplicate key error collection: ...
org.springframework.dao.DuplicateKeyException: Write failed with error code 11000 and error message ‘E11000 duplicate key error collection:...‘
Caused by: com.mongodb.DuplicateKeyException: Write failed with error code 11000 and error message ‘E11000 duplicate key error collection:
答案:猜测2是对的。mongodb不支持事务,所以猜测1不正常,mongodb不会回滚;跳过异常数据继续入库,什么鬼,哪有这么强大的数据库,猜测3不成立;猜测4是源于insert和save操作的对比,save遇到主键重复时,会使用新的值进行覆盖,但是复合唯一索引不支持这个操作。
标签:其他 重复数据 成功 error ESS save 数据库 插入 index
原文地址:https://www.cnblogs.com/linzhanfly/p/9760821.html