假設我刪除了mongodb中的文檔或子文檔。我可以使用與刪除的相同的_id創建文檔/子文檔嗎?在這種情況下,我們假設,我們不能做更新操作,只是刪除和創建。刪除後刪除mongodb _id
例如使用Mongoid(Rails的寶石MongoDB的): 我們有角色模型
class Person
include Mongoid::Document
field :a, :type => String
embeds_many :personattributes
end
class Personattribute
include Mongoid::Document
field :myattribute, :type => String
embedded_in :person
end
而且在我的Rails控制器
class MyController < ApplicationController
...
@[email protected]
...
#controller will render page, an instance variable @the_attributes will be available as JSON in clientside
end
然後用戶做一些客戶端數據的修改。他們可以爲該人員數據添加一個或多個人員屬性。他們可以對其屬性進行一些更改。他們也可以刪除一些。 全部在客戶端。
然後通過AJAX調用,用戶將修改後的數據傳回JSON格式一樣
[{_id:"5253fd494db79bb271000009",myattribute:"test"},{...},...]
在控制器檢索器檢索數據 然後完全用新的替換裏面的人的屬性列表。完全刪除和插入,無需更新。
class MyController < ApplicationController
...
@person.personattributes.delete_all #delete all attributes a @person has
attributes=params[:attributes]
attributes.map {|attr|
Personattribute.new(:_id => Moped::BSON::ObjectId.from_string(attr["_id"].to_s), :myattribute => attr["myattribute"])
}
@person.personattributes=attributes
@person.save
...
end
我可以這樣做嗎?它只是意味着刪除全部,並插入所有並重用_ids。
如果不是,我會很樂意爲此採取一些更好的方法。
我不能做upsert,因爲被刪除的文檔將需要另一個循環來處理。
謝謝
你爲什麼要保持相同的ID? –
因爲其他數據(模型)是指特定的人物屬性。如果我更改了ID,那麼參考將被打破。感謝您提出澄清 –