2011-12-05 92 views
2

我正在使用ASP.NET MVC 3,C#和MongoDB。我有一個嵌入式文檔的模型,但我想爲每個嵌入式文檔自動生成一個新的_id。在嵌入式MongoDB文檔中強制生成新的_id

我可以在代碼做到這一點,並設置

Model._id = ObjectId.GenerateNewId(); 

但我喜歡它,如果我不擔心這樣做,讓MongoDB的自動生成每個嵌入文檔的新_id。

我不想將這些嵌入式文檔標準化爲一個新的集合,它們在這裏是有意義的,但我想爲它們有一個唯一的標識。

+0

你能否詳細說明爲什麼你需要在嵌入式文檔上有一個ID?我認爲這不應該是必要的。 – mnemosyn

+0

我想擁有Id,因爲即使它們已嵌入,我仍然需要唯一標識這些文檔。這些對象可以單獨編輯,但只能屬於一個父文檔。 – MaseBase

回答

2

MongoDB「自動生成」的唯一ObjectId是它用於主鍵的那個:_id

當您保存文檔時,MongoDB基本上不了解「模式」或「嵌入式」文檔或「子文檔數組」。沒有類型檢查或模式驗證,因此無法強制嵌入ID的實例化。

最好的辦法是把它包裝在父類中。如果這些嵌入式文檔具有與之相關的特定類,則可以將該GenerateNewId()置於該構造函數中。