【问题标题】:Spring Boot - Mongo | Saving large collection of Objects giving duplicate key errorSpring Boot - Mongo |保存大量对象给出重复键错误
【发布时间】:2018-09-07 06:41:14
【问题描述】:

我有一个spring-boot 应用程序,该应用程序具有一次处理和保存大约 100 个对象的列表的服务。

在处理状态之前一切似乎都很好,但调用MongoRepositorysave 方法会引发以下异常:

com.mongodb.DuplicateKeyException: Write failed with error code 11000 and error message 'E11000 duplicate key error collection: uhtableau_db.ticket index: _id_ dup key: { : 0 }'

我也在清理数据库后重试,但同样的错误。无法理解我做错了什么。

这里是文档对象:

@Document
public class Ticket {

public Ticket(){

}

@Id
private long id;


private long ticket_id;  // this is the field in the json which i am processing


private String topic;

private List<String> tag;


private String type;


private long brand;
private long group;


private String priority;


private String status;



private String created_at;


private String channel;

}

在处理一些 json 数据作为输入后,我创建了这个 Ticket 文档的列表。我需要将此列表保存在 mongo 中。

这是在做什么:

 @Autowired
 TicketRepository ticketRepository;

@GetMapping("/tickets")
public void saveTicketData(){

    List<Ticket> tickets = ZendeskClient.parseJsonForTicketList(ticketJson);
    ticketRepository.save(tickets);
}

还有TicketRepository

public interface TicketRepository extends MongoRepository<Ticket, Long> {

}

【问题讨论】:

  • 我希望您将“id”字段集保存到数据库中。这似乎始终是相同的值。您可能需要自己注释某些生成器或设置唯一 ID?
  • 我同意@Konrad 所说的。尝试创建您自己的唯一 ID 或将其保留为空白/空。 mongo 会为你创建新的 id

标签: java mongodb spring-boot spring-mongodb


【解决方案1】:

如果你需要使用空值的能力,你可以为@Id使用对应的对象(spring data mongo用来进行新的插入)

@Id
private Long id

解析阶段的“parseJsonForTicketList”方法肯定会将id设置为0。

【讨论】:

    猜你喜欢
    • 2018-12-30
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2020-02-20
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多