2013-07-07 21 views
-3

我是新來的MongoDB,並試圖找出一些解決方案的基本要求。MongoDB retreiving最後插入的文件

這裏是場景: 我有一個應用程序通過調度程序將信息保存到MongoDB。每當調度程序運行時,我需要從db中獲取最後插入的文檔以獲取最後一個信息ID,我應該通過請求發送信息以獲取下一組信息。另外當我保存一個對象時,我需要驗證它是否已經存在一個字段的特定值,如果它存在,我只需要更新該文檔中的計數,否則將保存一個新的。

我的問題是:

  • 我使用MongoDB的Java驅動程序。自己生成對象標識是否好,還是使用從驅動程序或MongoDB本身生成的內容好?

  • 檢索上次插入的文檔以找到最後處理的信息ID的最佳方法是什麼?

  • 如果我在每次插入前在列中查找特定值,我擔心應用程序的性能,因爲它應該有成千上萬的記錄。什麼是做這個驗證的最好方法?

  • 我在某些地方看到他們在做插入時說兩次寫入,一次是將文檔寫入集合,另一次是將它寫入另一個集合,最後更新以跟蹤最後插入的條目。這是一個好方法嗎?對於關係數據庫,我們通常不會這樣做。

  • 我可以期待生成的對象id對於未來插入的每條記錄都是唯一的嗎? (懷疑它是否可以重複)

    謝謝。

+1

這裏有太多問題。通過一點搜索,你會找到每一個這樣的答案。 'ObjectIds'總是唯一的並且包含時間戳。 http://stackoverflow.com/questions/3305561/how-to-query-mongodb-with-like – WiredPrairie

+0

這些是多個無關的問題,其中很多都很常見。請檢查搜索功能的答案,然後爲每個找不到答案的單獨問題。 – Philipp

+0

@WiredPrairie這是Google結果的有趣部分。 – thedp

回答

1

我可以期待生成的對象ID爲插在未來過於每一條記錄是唯一的? (懷疑它是否可以重複)

我正在使用MongoDB java驅動程序。自己生成對象標識是否好,還是使用從驅動程序或MongoDB本身生成的內容好?

如果您沒有提供文檔的對象ID,mongo會自動爲您生成它。所有文件都必須有_id。這裏是相關的參考。

The relevant part is 
    ObjectId is a 12-byte BSON type, constructed using: 

    a 4-byte value representing the seconds since the Unix epoch, 
    a 3-byte machine identifier, 
    a 2-byte process id, and 
    a 3-byte counter, starting with a random value. 

http://docs.mongodb.org/manual/reference/object-id/

我想這是綽綽有餘隨機多(雖然窮哈希的選擇,因爲單調日期/時間的增加)

如果我做一個查找的特定值每個插入前的列,我擔心應用程序的性能,因爲它應該有成千上萬的記錄。什麼是做這個驗證的最好方法?

首先指定字段(mongodb中沒有列,2個文檔可以有不同的字段)。

db.collection_name.ensureIndex({fieldName : 1}) 

什麼是檢索最後插入的文件,找到上次處理>信息ID的最佳方式?

有趣的事實。如果我們使用一次,然後刪除文檔,我們不需要info id字段。 _id字段按照日期排序。但是,如果文檔定期更新,那麼我們需要使用查找和修改操作以原子方式修改文檔。

http://api.mongodb.org/java/2.6/com/mongodb/DBCollection.html#findAndModify%28com.mongodb.DBObject,%20com.mongodb.DBObject,%20com.mongodb.DBObject,%20boolean,%20com.mongodb.DBObject,%20boolean,%20boolean%29

現在你已經更新了最後插入/修改文件的日期。確保此字段已編入索引。現在,使用上面的鏈接,查找排序參數,並與

我在一些地方執行插入時,他們在談論兩個寫看到的,一個填充它的文件寫入到集合另一個將它寫入另一個集合,最後更新以跟蹤最後插入的條目。這是一個好方法嗎?對於關係數據庫,我們通常不會這樣做。

糟糕的主意!歡迎來到Mongo。你可以做得比這更好。