java - 在带有 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?
解决方案
推荐阅读
- android - `.gitignore` 用于具有 Android 目标的 Ionic 项目
- python - 打印 subprocess.run 的输出并将其显示在屏幕上
- c++ - 理解 C++ 中的字符串::查找
- java - 使用 Selenium 和 Java 获取可以从下拉列表中选择的选项列表的方法是什么?
- google-sheets - 谷歌电子表格公式无法正常工作
- asp.net-core - 绑定到包含枚举类型作为属性之一的业务对象
- gremlin - Gremlin 查询是否有效取决于上下文
- javascript - 我从我的数据库中接收原始 HTML 并将其呈现在前端,但是,其中一个 HTML 类没有任何作用,即使它已应用
- ios - 'absl/base/config.h' 文件未找到
- php - 返回 JSON 而不是使用数据绑定重新渲染组件