2012-11-20 78 views
8

我希望爲mongo數組中的對象添加_id作爲屬性。Mongo _id for subdocument array

這是一個很好的做法嗎? 索引編制有問題嗎?

+2

這個問題有點模糊。你能提供更多的細節嗎? – Eric

+0

http://stackoverflow.com/questions/8245538/mongodb-id-cannot-be-an-array – 42n4

+3

我不認爲這個鏈接與這個問題有任何關係。 – Sammaye

回答

16

我希望爲mongo數組中的對象添加_id作爲屬性。

我認爲:結構對這個問題

{ 
    g: [ 
     { _id: ObjectId(), property: '' }, 
     // next 
    ] 
} 

類型。

這是一個很好的做法嗎?

不正常。 _id是實體的唯一標識符。因此,如果您希望在子文檔對象中添加_id,那麼您可能沒有很好地對數據進行規範化處理,這可能表明您的模式設計中存在一個基本缺陷。

子文檔被設計爲包含該文檔的重複數據,即地址或用戶或其他東西。

這就是說_id並不總是一件壞事添加。以我剛纔提到的地址爲例。假設你有一個購物車系統,並且(出於某種原因)你沒有將地址複製到訂單文檔中,那麼你將使用_id或其他標識符來獲取該子文檔。

你也必須考慮鏈接文件。如果_id描述了另一個文檔,並且屬性是該文檔相對於該鏈接文檔的自定義屬性,那麼也沒關係。

索引編制有問題嗎?

一個ObjectId還是相當可觀的,這樣是值得考慮過更小,更獨特的ID或不使用_id在所有的子文檔。

對於索引,它並不與文檔本身的標準_id字段有任何不同,並且整個字段中的唯一索引應該在整個集合中工作(依賴於方案,測試您的查詢)。

注意:MongoDB不會爲您添加_id子文檔。

+0

@aioobe我認爲在這種情況下,是的,我的意思是規範化,這是一個非常古老的答案,但我相信我的意思是他沒有將實體很好地分開,這將是正常化。 – Sammaye

+0

@aioobe完成謝謝 – Sammaye

+0

如果我在子文檔上創建一個mongodb對象_id,那麼_id在整個集合中是否自動唯一? – Saitama