将.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。