2011-12-05 58 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()置于该构造函数中。