我正在用C#试验Mongodb和NoRM。
从我所看到的,在Mongodb中唯一标识文档的ObjectId是一种“特殊”Guid(在某种意义上是唯一的),但它有一些重要的部分,允许更容易的排序和索引(时间戳) ,机器哈希,processId和增量)。
我想保持我的对象真的POCO与自动生成的Guid为Id所以没有像ObjectId这样的外部类型会阻止我迁移到另一种技术或者回到经典的Ado.net或Nhibernate的东西。
另一种选择是在POCO中使用Id作为字符串并使用ObjectId.NewObjectId().ToString()
它的最佳做法是什么?
答案 0 :(得分:2)
ObjectId不是guids。 Guid是MS为其使用的UUID版本提供的名称。 ObjectIds是一种完全不同的算法。
话虽如此,你可以在mongo中使用任何你喜欢的ID作为ID,并且它不会有性能损失(在rails世界中,一些ORM主张使用字符串)
在mongo中使用ObjectId主要是为了节省大小。如果这是一笔大交易,只需使用别的东西,只要意识到使用不必要的大型ID字段最终只会浪费内存。但是,如果这是一个大问题,那么去Guids。
答案 1 :(得分:0)
你可以使用任何你喜欢的类型作为_id,因为Matt说它在它的收藏中是独一无二的。
将UUID存储在[DOC:BSON]类型中是最有效的,但如果空间和速度不是问题,您也可以使用十六进制字符串。