Mongodb NoRM和POCO

我正在用C#试验Mongodb和NoRM。

从我所读到的,在Mongodb中唯一标识文档的ObjectId是一种“特殊”Guid(在某种意义上是唯一的),但在其中有一些重要的部分允许更容易的排序和索引(时间戳,机器哈希) ,processId和增量)。

我想保持我的对象真的POCO与自动生成的Guid为Id所以没有像ObjectId这样的外部类型会阻止我迁移到另一种技术或者回到经典的Ado.net或Nhibernate的东西。

另一种选择是在POCO中使用Id作为字符串并使用ObjectId.NewObjectId().ToString()

它的最佳实践是什么?

ObjectId不是guids。 Guid是MS为其使用的UUID版本提供的名称。 ObjectIds是一种完全不同的算法。

话虽这么说,你可以在mongo中使用你喜欢的任何ID,并且它不会有性能损失(在rails世界中,一些ORM主张使用字符串)

在mongo中使用ObjectId主要是为了节省大小。 如果这是一笔大交易,只需使用其他东西,只要意识到使用不必要的大型ID字段最终只会浪费内存。 但如果这是一个大问题,那么去Guids吧。

您可以使用任何您喜欢的类型作为_id,因为Matt说它在它的集合中提供它是独一无二的。

将UUID存储在[DOC:BSON]类型中效率最高,但如果空间和速度不是问题,您也可以使用hex字符串。