将.NET Guid转换为MongoDB ObjectID

如何将.NET GUID转换为MongoDB ObjectID(在C#中)。 另外,我可以将它再次转换回ObjectID中的相同GUID吗?

你不能将ObjectId转换为GUID ,反之亦然,因为它们是两个不同的东西(不同的大小,算法)。

您可以为mongoDb _id使用任何类型,包括GUID

例如,在官方c#驱动程序中,您应该指定属性[BsonId]

 [BsonId] public Guid Id {get;set;} [BsonId] public int Id {get;set;} 

ObjectId :

BSON ObjectID是一个12字节的值,包括一个4字节的时间戳(自纪元以来的秒数),一个3字节的机器ID,一个2字节的进程ID和一个3字节的计数器。 请注意,与BSON的其余部分不同,时间戳和计数器字段必须以big endian存储。 这是因为它们是逐字节比较的,我们希望确保大致增加的顺序。

GUID :

GUID的值表示为32个字符的hex字符串,例如{21EC2020-3AEA-1069-A2DD-08002B30309D},通常存储为128位整数

仅供参考您可以从ObjectId转换为Guid

  public static Guid AsGuid(this ObjectId oid) { var bytes = oid.ToByteArray().Concat(new byte[] { 5, 5, 5, 5 }).ToArray(); Guid gid = new Guid(bytes); return gid; } ///  /// Only Use to convert a Guid that was once an ObjectId ///  public static ObjectId AsObjectId(this Guid gid) { var bytes = gid.ToByteArray().Take(12).ToArray(); var oid = new ObjectId(bytes); return oid; } 

虽然不是一个直接的答案,但请记住,没有。要求_id是一个ObjectID —只有它是唯一的。

可以为_I’d设置任何有效类型,包括嵌入对象或。 你应该没问题(除了任何唯一性违规)使用_ID的GUID; 实际上,ObjectID实际上只是一个自定义GUID。