mongodb查找并返回id作为字符串 - java

时间:2016-10-04 10:49:28

标签: java mongodb bson

上午,

似乎有一个脑力!环顾四周,看不到任何其他人有同样的问题,所以我要么完全错过了某些东西(最有可能),要么没有其他人有这个用例。

我基本上想要返回存储在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的评论,我不相信这是重复的,因为我确实想要包含id不一定排除任何东西。如果字符串表示形式在org.bson.types.ObjectId对象中作为属性,那么我可以将其余部分排除在外,但事实并非如此。

1 个答案:

答案 0 :(得分:0)

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

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

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