【问题标题】:Get the object id after inserting the mongodb document in javajava中插入mongodb文档后​​获取对象id
【发布时间】:2017-08-29 03:01:10
【问题描述】:

我正在使用 mongodb 3.4,我想获取最后插入的文档 ID。我已经搜索了所有内容,我发现如果我使用 BasicDBObject,可以使用下面的代码。

BasicDBObject docs = new BasicDBObject(doc);
collection.insertOne(docs);
ID = (ObjectId)doc.get( "_id" );

但问题是我使用的是 Document 类型而不是 BasicDBObject,所以我试图像这样得到它,doc.getObjectId();。但它会问一个我真正想要的参数,那么有人知道如何获取它吗?

编辑

这是我将它插入到 mongo db。

Document doc =  new Document("jarFileName", jarDataObj.getJarFileName())
                                        .append("directory", jarDataObj.getPathData())
                                        .append("version", jarDataObj.getVersion())
                                        .append("artifactID", jarDataObj.getArtifactId())
                                        .append("groupID", jarDataObj.getGroupId());

如果我使用doc.toJson(),它会显示整个文档。有没有办法只提取_id?

这只会给我我想要的值,就像 objectkey,所以我可以将它用作参考键。

collection.insertOne(doc);
jarID = doc.get( "_id" );
System.out.println(jarID); //59a4db1a6812d7430c3ef2a5

【问题讨论】:

  • “说话很便宜,给我看代码”。 - 莱纳斯·托瓦兹。
  • BasicDBObjectDocument 都实现了 Map 接口,.get() 实际上属于该接口。因此,您只需将上述代码中的Document 替换为BasicDBObject
  • 我编辑了问题,但我想要的是 objectid 而不是 id 值。
  • @Abhijit Sarkar 发布了你想要的代码,有什么想法吗?

标签: java mongodb


【解决方案1】:

基于ObjectIdJavadoc,你可以简单地从一个24字节的十六进制字符串中实例化一个ObjectId,如果你使用UTF-8编码,这就是59a4db1a6812d7430c3ef2a5。你为什么不直接做new ObjectId("59a4db1a6812d7430c3ef2a5"),或者new ObjectId("59a4db1a6812d7430c3ef2a5".getBytes(StandardCharsets.UTF_8))?虽然,我会说在与 Mongo 集成的层之外暴露 ObjectId 是一个设计缺陷。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 2018-05-15
    • 2017-02-17
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    相关资源
    最近更新 更多