是否有一種簡單的方法可以使用Java驅動程序獲取mongoDB實例的最後插入文檔的ID(ObjectID)?獲取mongoDB w/Java驅動程序中最後一個插入文檔的ID
回答
討厭回答我的問題,但我意識到,你可以這樣做:
BasicDBObject doc = new BasicDBObject("name", "Matt");
collection.insert(doc);
ObjectId id = (ObjectId)doc.get("_id");
我不知道有關Java驅動程序,但爲後人中,GetLastError函數命令可以運行來獲得的_id一個寫,甚至一個upsert(從1.5.4開始)
將文檔插入到MongoDB集合後,成功插入應更新必填字段(即_id)。您可以查詢_id的插入對象。
它的安全做
doc.set("_id", new ObjectId())
如果你看一下驅動程序代碼
if (ensureID && id == null){
id = ObjectId.get();
jo.put("_id" , id);
}
public static ObjectId get(){
return new ObjectId();
}
你是不是故意說'這樣做可以省事'或'做'安全嗎? – pd40 2012-10-11 00:07:31
出於某種原因,在MongoDB 2.2.2(而不是之前的2.2.0版本)和Java驅動程序2.10.1中,答案中的代碼不起作用;在將對象插入到文檔中後,我似乎無法獲得其_id,即使MongoDB明顯自動生成ObjectId。但是,您手動創建ObjectId的解決方案確實可行,並感謝此選項! – 2012-12-04 08:39:30
BasicDBObject doc = new BasicDBObject("_id", new ObjectId()); System.out.println("doc.id before: " + doc.get("_id")); new Mongo("localhost").getDB("test").getCollection("t").insert(doc); System.out.println("doc.id after: " + doc.get("_id"));
此代碼適用於我,在新版本上測試mongo 2.2.2,驅動程序2.10.1 –
zlob
2013-01-16 14:21:17
這是插入操作:
DBCollection table1 = db.getCollection("Collection name");
BasicDBObject document = new BasicDBObject();
document.put("_id",value);
document.put("Name", name);
table1.insert(document);
插入u得到最後插入編號:
DBCollection tableDetails = db.getCollection("collection name");
BasicDBObject queryDetails = new BasicDBObject();
queryDetails.put("_id", value);
DBCursor cursorDetails =tableDetails.find(queryDetails);
DBObject oneDetails;
oneDetails=cursorDetails.next();
String data=oneDetails.get("_id").toString();
System.out.println(data);
得到值後轉換爲inter類型。
爲了避免從鑄造到Object
ObjectId
,給予com.mongodb.client.MongoCollection collection
和org.bson.Document doc
,你可以做到以下幾點:
collection.insert(doc);
ObjectId id = doc.getObjectId("_id");
在MongoTemplate.class有一個方法
protected <T> void doInsert(String collectionName, T objectToSave, MongoWriter<T> writer) {
assertUpdateableIdIfNotSet(objectToSave);
initializeVersionProperty(objectToSave);
maybeEmitEvent(new BeforeConvertEvent<T>(objectToSave, collectionName));
DBObject dbDoc = toDbObject(objectToSave, writer);
maybeEmitEvent(new BeforeSaveEvent<T>(objectToSave, dbDoc, collectionName));
Object id = insertDBObject(collectionName, dbDoc, objectToSave.getClass());
populateIdIfNecessary(objectToSave, id);
maybeEmitEvent(new AfterSaveEvent<T>(objectToSave, dbDoc, collectionName));
}
和方法爲我們設置ID
protected void populateIdIfNecessary(Object savedObject, Object id) {
if (id == null) {
return;
}
if (savedObject instanceof BasicDBObject) {
DBObject dbObject = (DBObject) savedObject;
dbObject.put(ID_FIELD, id);
return;
}
MongoPersistentProperty idProp = getIdPropertyFor(savedObject.getClass());
if (idProp == null) {
return;
}
ConversionService conversionService = mongoConverter.getConversionService();
MongoPersistentEntity<?> entity = mappingContext.getPersistentEntity(savedObject.getClass());
PersistentPropertyAccessor accessor = entity.getPropertyAccessor(savedObject);
if (accessor.getProperty(idProp) != null) {
return;
}
new ConvertingPropertyAccessor(accessor, conversionService).setProperty(idProp, id);
}
我們可以看到實體是否是BasicDBObject的子類,它會爲我們設置一個id。
- 1. Mongodb Scala驅動程序不插入一個文檔
- 2. 獲取最後一個插入的ID
- 3. 嵌入式MongoDB文檔無法通過C#驅動程序獲取ID
- 4. 獲取最後一個插入ID
- 5. 獲取java中最後一個插入文檔的_id
- 6. 在插入文檔時MongoDB Ruby驅動程序類型轉換
- 7. MongoDB C#驅動程序 - InsertBatch獲取受影響的文檔數
- 8. 從最後插入的行中獲取最後一個插入ID
- 9. Mongo DB:獲取最後一個已知文檔後插入的所有文檔
- 10. 我如何獲得最後插入的ObjectId與golang mgo MongoDb驅動程序
- 11. MongoDB的Java驅動程序:mongojack,通過子文檔ID查詢
- 12. Rails一個MongoDB,如何獲取插入的最後一個文檔並確保它是線程安全的?
- 13. MongoDb 2.0 C#驅動程序不爲插入的ID創建值
- 14. MongoDB的:獲取最後插入
- 15. MongoDB:使用多個併發編寫器獲取最後插入文檔的ObjectId?
- 16. 抓取最後一個插入ID sqlsrv
- 17. 如何在LINQ中獲取最後一個插入的ID EF
- 18. 如何獲取CakePHP 3.0中的最後一個插入ID?
- 19. 如何獲取NEO4J中插入的最後一個內部ID?
- 20. 如何獲取MVC中最後一個插入的ID?
- 21. MongoDb:分組然後排序並取最後一個文檔
- 22. 插入最後一個ID
- 23. 獲取最後插入的行的ID
- 24. 獲取最後插入的值的ID
- 25. 獲取最後插入的ID
- 26. Node + Mongoose:獲取最後插入的ID?
- 27. 如何獲取最後插入的ID?
- 28. 如何在MongoDB C++驅動程序中使用DBClientBase類插入文檔?
- 29. DB2如何從表中獲取最後一個插入ID
- 30. pdo中的最後一個插入ID
回答你自己的問題是[鼓勵](http://stackoverflow.com/help/self-answer),不用擔心。 – 2014-04-13 10:16:24
謝謝你。你知道如何使用彈簧數據mongodb做同樣的事嗎? – 2015-11-02 07:09:15