这个问题与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类型。实际上,它仍然为null,我看不到如何访问插入文档的ObjectId。
此版本的collection.insertOne不会返回任何内容,并且显然不会更改dto的id字段。
可能我可以手动将DTO转换为Document并使用该版本的collection.insertOne,然后获取对象ID并将其放回DTO中,但这效率很低。考虑到我将要使用具有许多不同DTO类的许多集合的事实,并且我不想为所有这些都编写手动转换。
那么我该如何检索刚刚插入的文档的对象ID?