首页 > 解决方案 > 在带有 Java 驱动程序的 mongoDB 中获取最后插入文档的 ID - WITH TYPED COLLECTION

问题描述

这个问题与Get ID of last inserted document in a mongoDB w/Java driver非常相似,但有一个区别:我使用的是类型化/泛型集合。

示例 DTO:

public class ForumMessageDTO {
    @Expose
    @BsonId
    private ObjectId id;
    private Long forumId;
    @Expose
    private Long userId;
    @Expose
    private Date created;
    @Expose
    private String message;
    /* getters and setters are not shown here but they are implemented.... */
}

插入文档的示例代码:

public ForumMessageDTO addMessage(Long forumId, Long userId, String message) {
    ForumMessageDTO dto = new ForumMessageDTO(forumId, userId, new Date(), message);
    messages.insertOne(dto);
    return dto; /* dto.id is null here!!! But why? */
}   

返回的 dto 应该填写其 id 字段,因为它使用 @BsonId 进行了注释并且它具有 ObjectId 类型。实际上,它仍然为空,我看不到如何访问插入文档的 ObjectId。

这个版本的collection.insertOne 没有返回任何东西,显然它没有改变dto 的id 字段。

可能我可以手动将 DTO 转换为 Document 并使用该版本的 collection.insertOne,然后获取对象 id 并将其放回 DTO,但这非常低效。考虑到我将使用许多具有许多不同 DTO 类的集合,并且我不想为所有这些类编写手动转换。

那么如何检索刚刚插入的文档的对象 ID?

标签: javamongodb

解决方案


推荐阅读