2014-10-09 93 views
4

我需要在MongoDB中插入文檔自動插入文檔(以代替自動生成的對象ID特定ID)用java ..MongoDB的:與特定ID,而不是生成的對象ID

  1. 要插入一個文檔或更新,如果存在,我試着用findOne來搜索id,如果不存在的話insert的id然後findAndModify。它的工作原理,但我不認爲這是有效的方式,這是非常耗時的。有沒有更好的方法來實現這一目標?

  2. 要一次插入多個文檔,我遵循此solution。但我不知道如何插入我的自定義ID而不是objectID?

任何幫助將不勝感激

回答

4
  1. 對於你的第一個問題的MongoDB has upsert所以

    db.collection.update( {查詢ID},{ 文件},{ upsert:true} )

    or in the java driver

    yourCollection.update(searchObject,modifiedObject,true,false);

    如果你想設置你剛纔設置的_id鍵手動即

    yourBasicDBObject.put自定義ID(「_ ID」,yourCustomId)

    ,你只需要確保它是爲每個文件是唯一的。

    您還需要在您的modifiedObject中設置_id,否則將生成一個新的

  2. 對於批量操作,只需通過給_id鍵 設置每個documnet的自定義ID也應起作用。

+0

確實。但是真的和指向已經被採用的'.findAndModify()'方法沒有什麼不同。原諒我,如果我錯了,但問題似乎是問「如何分配一個自定義_id值,在** bulk **。所以Upserts是一樣的,顯然」多「更新不會削減它分配一個自定義ID – 2014-10-09 09:04:12

+0

@NeilLunn我知道第一部分與單個文檔相關,因爲它使用'findOne()'來查看_id是否存在,如果不存在則插入它只包含'_id',然後是'.findAndModify'它帶有內容,'uspert'就是這樣一步操作,操作更簡單,問題2只涉及到插入操作,所以爲每個文檔部分設置一個'_id'應該是解決方案,再指定 – Trudbert 2014-10-09 09:32:17

+0

您似乎誤解了批判這裏OP指出的問題是「什麼價值」分配給'_id'例如,一個「多」更新只會分配默認的'ObjectId'值,但當然只是「循環」插入和獲取你自己的id值,然後聯繫服務器並更新等等「是無效的客戶「,這是OP說的。因此,這個問題真的會問「什麼是有效的?」恕我直言,儘管也許沒有措辭最好的方式。 Ce la vie。 – 2014-10-09 09:40:19