【问题标题】:Getting the id of a newly inserted document [duplicate]获取新插入文档的 id [重复]
【发布时间】:2015-04-06 12:40:39
【问题描述】:

我正在与Spring Integration 合作一个项目。在消息流的某个时刻,我使用MongoDB Outbound Channel Adapter 将有效负载保存到我的 mongodb 数据库中。

有没有一种方法可以让我在插入文档时立即获取它们的 ID?基本上,在插入文档之后,我需要将其 id 传递到另一个通道以进行进一步处理。利用 Spring Integration 基础架构实现这一目标的最佳方法是什么?

【问题讨论】:

  • @Neil Lunn 这不是一个重复的问题。这个问题特定于 Spring Integration,不适用于基于 java 的解决方案,这是另一个线程的重点。请查看我对stackoverflow.com/a/29471597/2012594的评论
  • 所提供的答案与链接问题的答案完全相同。这使它成为重复。

标签: mongodb spring-integration spring-data-mongodb


【解决方案1】:

来自MongoTemplate.insert(Object)

如果您的对象具有“Id”属性,它将使用从 MongoDB 生成的 Id 进行设置。如果您的 Id 属性是字符串,则 MongoDB ObjectId 将用于填充该字符串。否则,从 ObjectId 转换为您的属性类型将由利用 Type Conversion API 的 Spring 的 BeanWrapper 类处理。有关详细信息,请参阅 Spring 的类型转换。

【讨论】:

  • 谢谢你。您展示的方法是使用弹簧数据的方法。但是,我一直在寻找使用 Spring Integration 中的功能(如果有的话)的解决方案。例如,(正如我在问题中提到的)我可以将有效负载保存到我的数据库中,而无需直接使用任何 mongo-java 或 spring-data API。如果我能找到类似的方法来获取插入的文档 ID,那就太好了。我仍然赞成您的回答,因为它部分解决了我的问题。非常感谢。
  • @Tanvir 你看过这个人了吗? stackoverflow.com/questions/21459319/… 如果你想使用 Spring Integration,这似乎是你想要的东西
【解决方案2】:

你可以试试:

BasicDBObject doc = new BasicDBObject("foo", "bar");
collection.insert(doc);
ObjectId id = (ObjectId)doc.get("_id");

【讨论】:

  • 谢谢你。您展示的方法是使用 mongo-java-driver 的 java 方式。但是,我一直在寻找使用 Spring Integration 中的功能(如果有的话)的解决方案。我仍然赞成您的回答,因为它部分解决了我的问题。
猜你喜欢
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多