2014-04-09 47 views
5

我正在Mongo中運行一個大型數據饋送,我需要一個外部客戶端連接並從最後一個可用記錄中獲取饋送 - 而不是比當前更早的任何記錄。我有一個可以運行的可用遊標,但它從表格的開始處開始,我希望從最近插入的記錄開始。我知道如何做到這一點,假設我有最後插入記錄的_ID。我的問題是,我無法在Java中使用findOne正常工作以恢復最後插入的記錄。簡單地說,我需要在Java中的等價蒙戈JS命令:Java MongoDB FindOne獲取最後插入的記錄

db.market.findOne({$query:{}, $orderby:{$natural:-1}}) 

有一對夫婦在這裏的帖子我發現,似乎類似的,但他們假設客戶端也是一個插入記錄並且已經知道最後一個可用的ID。

總而言之,正確的相應的Java代碼會完成相同的事情 - 那就是獲取最後一個可用記錄的_ID?

我想作爲替代方案,我可以讓我的客戶端插入一次性記錄,獲取該ID並從那裏開始,但我更願意以正確的方式執行此操作。

由於

+3

我一直在尋找一整天,雖然有基本的文檔,但我發現網絡上任何地方都有零個例子,而且我無法獲得任何我嘗試工作的排列組合。這就是我在這裏問的原因。 – mikepinch

回答

23

爲了清楚起見,自然順序是不插入順序,除了在封端的集合的情況下。你將需要另一個標準來排序。

假設您使用的是默認的ObjectID,您可以將其用作插入的度量標準,因爲默認值以插入時間開始(以毫秒爲單位)且始終是唯一的。

您還應該使用find而不是findOne。請嘗試以下操作:

db.market.find({}).sort({_id:-1}).limit(1) 
+0

爲什麼'.find'而不是'.findOne'? – naoxink

+4

findOne shell幫助程序不會(或者在寫入時沒有)允許您設置排序選項等。 – daveh

1

,如果你想這樣做在Java代碼中 你CAND做這樣

Document myDoc = (Document)collection.find().sort(new BasicDBObject(<field>,-1)).first(); 

它會返回一個文檔是插入的最後下令由顯著場 =)

相關問題