将.NET Guid转换为MongoDB ObjectID

Jou*_*man 26 c# guid mongodb

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

And*_*ich 34

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

你可以使用任何类型的mongoDb _id包括GUID.

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

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

[BsonId]
public int Id {get;set;}
Run Code Online (Sandbox Code Playgroud)

ObjectId:

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

GUID:

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


Mid*_*mmy 7

仅供参考您可以从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;
    }

    /// <summary>
    /// Only Use to convert a Guid that was once an ObjectId
    /// </summary>
    public static ObjectId AsObjectId(this Guid gid)
    {
        var bytes = gid.ToByteArray().Take(12).ToArray();
        var oid = new ObjectId(bytes);
        return oid;
    }
Run Code Online (Sandbox Code Playgroud)