【问题标题】:mongodb find and return id as a string - javamongodb 查找并返回 id 作为字符串 - java
【发布时间】:2017-02-12 12:04:56
【问题描述】:

早上,

看来是脑残了!环顾四周,看不到其他人有同样的问题,所以我要么完全错过了某些东西(很可能),要么没有其他人有这个用例。

我基本上想返回存储在 mongodb 集合中的所有对象,包括它们的 id,但是作为字符串表示而不是完整对象。所以这个:

public ArrayList findAllObjects(){
      return db.getCollection("objects").find().into(new ArrayList<Document>());
}

{
  _id: {
    class: "org.bson.types.ObjectId",
    counter: 7230903,
    date: "2016-10-03T12:39:38Z",
    machineIdentifier: 5652488,
    processIdentifier: 8859,
    time: 1475498378000,
    timeSecond: 1475498378,
    timestamp: 1475498378
  },
  name: "Test Object"
},

现在,如果我在 mongo 控制台上运行查找,我会得到以下内容:

{
  "_id": ObjectId("57f2518a564008229b6e55b7"),
  "name": "Test Object"
}

正是这个 57f2518a564008229b6e55b7 我想在原始 json 中作为 _id(可能可以添加另一个名称)字段返回。

我只需在单个文档上运行 get getObjectId() 即可在 java 代码中获取该字符串表示形式。所以我可能会遍历每个结果并设置/添加 _id 但这对我来说有点异味。

欢迎提出任何建议。

谢谢

更新:

感谢 Sinclair 的 cmets,但我不认为这是重复的,因为我确实想包含 id 不一定排除任何东西。如果字符串表示在 org.bson.types.ObjectId 对象中作为属性,那么我可能会排除其余部分,但事实并非如此。

【问题讨论】:

标签: java mongodb bson


【解决方案1】:

您可以简单地使用 toString() 方法将对象转换为字符串:

List<Document> documents = collection.find().into(new ArrayList<>());

documents.parallelStream().forEach(document -> {
     document.put("_id", document.get("_id").toString());
});

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多