我正在C#中试验Mongodb和NoRM。
据我所知,在Mongodb中唯一标识文档的ObjectId是一种“特殊的”Guid (在某种意义上是唯一的),但它包含一些重要的部分,允许更容易地进行排序和索引(时间戳、机器哈希、processId和增量)。
我想让我的对象使用自动生成的Guid作为Id,这样就不会有像ObjectId这样的外部类型阻止我迁移到另一种技术或回到经典的Ado.net或Nhibernate。
另一种选择是在POCO中以字符串形式使用Id并使用ObjectId.NewObjectId().ToString()
它的最佳实践是什么?
发布于 2010-11-08 23:44:04
ObjectId不是guids。Guid是MS为其使用的UUID版本提供的名称。ObjectIds是一种完全不同的算法。
也就是说,您可以在mongo中使用任何您喜欢的ID,并且它不会有性能损失(在rails世界中,一些ORM提倡使用字符串)
在mongo中使用ObjectId主要是为了节省空间。如果有那么大的问题,就使用其他的东西,只需意识到使用不必要的大ID字段最终只会浪费ram。但如果这是一件大事,那就去找Guids吧。
发布于 2011-12-09 00:53:58
正如Matt所说,你可以使用任何你喜欢的类型作为_id,只要它在它的集合中是独一无二的。
将UUID存储在DOC:BSON类型中是最有效的,但如果空间和速度不是问题,也可以使用十六进制字符串。
https://stackoverflow.com/questions/4125275
复制相似问题