2013年6月21日 星期五

在 Java 中取得 MongoDB 剛插入的資料的 ObjectID

這問題就跟一般 RDBMS 想在資料插入後取得自動產生的 ID 是一樣的意思~
不過在 MongoDB 上,這個問題相對似乎簡單了許多~。

參考 [1] 的問題,發問的網友自己發現了可以藉由以下的方式直接取得 ObjectID。
BasicDBObject doc = new BasicDBObject( "name", "Matt" );
collection.insert( doc );
ObjectId id = doc.getObjectId( "_id" );

可以發現,ObjectID 直接被放進原本 query 的 DBObject 裡了!
剛剛想了一下,我猜也許是因為 ObjectID 的產生途徑並不是直接由 MongoDB 產生的吧~
MongoDB 的書上有寫到,ObjectId 因為一些理由,是由 Java driver 產生的,而不是直接由 MongoDB 資料庫本身產生的
因此 Java driver 也許是在接到 insert 指令時,就依照指定的規則產生一個 ObjectID,然後放進 query 裡面再一起送給 MongoDB
基於 Java 的 Object 是 call by reference 的特性,在 Java driver 做的更改,外面的呼叫端也可以看得到(因為變數都指向相同的記憶體位置)
因此才會有這樣有趣的小技巧可以使用吧~。

參考資料:
1、Get ID of last inserted document in a mongoDB w/ Java driver