2

我正在 C# 中尝试使用 Mongodb 和 NoRM。

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

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

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

它的最佳实践是什么?

4

2 回答 2

2

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

话虽如此,你可以在 mongo 中使用任何你喜欢的 ID,并且不会有性能损失(在 Rails 世界中,一些 ORM 提倡使用字符串)

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

于 2010-11-08T15:44:03.590 回答
0

你可以使用任何你喜欢的类型作为 _id 正如马特所说的那样,只要它在它的集合中是独一无二的。

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

于 2011-12-08T16:53:57.663 回答