我需要強制執行唯一約束上的嵌套文件,例如MongoDB的確保指數:嵌套重複實體
urlEntities: [
{ "url" : "http://t.co/ujBNNRWb0y" , "display_url" : "bit.ly/11JyiVp" , "expanded_url" :
"http://bit.ly/11JyiVp"} ,
{ "url" : "http://t.co/DeL6RiP8KR" , "display_url" : "ow.ly/i/2HC9x" ,
"expanded_url" : "http://ow.ly/i/2HC9x"}
]
URL,DISPLAY_URL和expaned_url需要是唯一的。如何在MongoDB中爲這種情況發出ensureIndex命令?
另外,這樣的嵌套文件是否是一個好的設計,或者我應該將它們移動到一個單獨的集合,並從這裏引用它們在urlEntities裏面?我是MongoDB的新手,任何最佳實踐建議都會非常有幫助。
全部場景:
說,如果我在其中有幾百萬個數據的數據庫下面有一個文件:
{ 「_id」:{ 「$ OID」: 「51f72afa3893686e0c406e19」}, 「user」:「test」,「urlEntities」:[{「url」:「http://t.co/64HBcYmn9g」,「display_url」:「ow.ly/nqlkP」,「expanded_url」:「http://ow.ly/nqlkP」}],「count」:0}
當我得到另一個具有類似urlEntities對象的文檔時,我只需要更新用戶和計數字段。首先,我想對urlEntities字段執行唯一約束,然後處理異常,然後進行更新,否則,如果在插入前檢查每個條目是否存在,它將對性能產生重大影響。那麼,我該如何在urlEntities中強制執行唯一性呢?我試過
{"urlEntities.display_url":1,"urlEntities.expanded_url":1},{unique:true}
但仍然能夠插入相同的文件兩次沒有例外。
此外,請建議任何更好的方法來處理這種情況。
謝謝。
你看了關於['$ addToSet'(http://docs.mongodb.org/manual/reference/operator/addToSet/)運營商? –
子文檔索引:http://stackoverflow.com/questions/16769705/subdocument-index-in-mongo – WiredPrairie
好的設計?真的很難知道給出這麼少的信息。有很多可能性 - 這取決於你需要的查詢等。 – WiredPrairie