2017-08-29 14 views
1

mongodb 3.4を使用していますが、最後に挿入したドキュメントIDを取得したいとします。私はすべてを検索して、私はBasicDBObjectを使用した場合、以下のコードが使用できることを発見しました。Javaでmongodbドキュメントを挿入した後にオブジェクトIDを取得

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

しかし、問題は、私はこの、doc.getObjectId();などのそれを取得しようとしました文書型ではないBasicDBObjectを使用しています。しかし、それは私が実際に私が欲しいパラメータを尋ねる、誰もそれを得る方法を知っていますか?

EDIT

これは私がデシベルをMongoのためにそれを挿入しています。

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のようにそれをしたい値だけを与え、だから私は、参照キーとして使用することができます。 ObjectIdJavadocに基づいて

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

"話が安く、コードを見せてください"。 - Linus Torvalds。 –

+0

['BasicDBObject'](http://api.mongodb.com/java/current/com/mongodb/BasicDBObject.html)と[' Document'](http://api.mongodb.com/java/current /org/bson/Document.html)は、['Map'](http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true)インタフェースを実装していますそのうちの '.get()'は実際に属しています。ですから、上のコードで 'BasicDBObject'の' Document'を交換するだけです。 –

+0

https://stackoverflow.com/questions/3338999/get-id-of-last-inserted-document-in-a-mongodb-w-java-driver?rq=1これは役に立ちます – Jerry06

答えて

0

、あなたは単にあなたがUTF-8エンコーディングを使用した場合59a4db1a6812d7430c3ef2a5が何であるかである24バイトの16進数文字列からObjectIdをインスタンス化することができます。 new ObjectId("59a4db1a6812d7430c3ef2a5")、またはnew ObjectId("59a4db1a6812d7430c3ef2a5".getBytes(StandardCharsets.UTF_8))をやってみませんか?しかし、私はObjectIdをMongoと統合されたレイヤの外側に公開することは設計上の欠陥であると言います。

関連する問題