Convert .NET Guid to MongoDB ObjectID
You can't convert ObjectId
into GUID
and vice versa, because they are two different things(different sizes, algoritms).
You can use any type for mongoDb _id
including GUID
.
For example in official c# driver you should specify attribute [BsonId]
:
[BsonId]
public Guid Id {get;set;}
[BsonId]
public int Id {get;set;}
ObjectId:
A BSON ObjectID is a 12-byte value consisting of a 4-byte timestamp (seconds since epoch), a 3-byte machine id, a 2-byte process id, and a 3-byte counter. Note that the timestamp and counter fields must be stored big endian unlike the rest of BSON. This is because they are compared byte-by-byte and we want to ensure a mostly increasing order.
GUID:
The value of a GUID is represented as a 32-character hexadecimal string, such as {21EC2020-3AEA-1069-A2DD-08002B30309D}, and is usually stored as a 128-bit integer
FYI You can convert from an ObjectId to a 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;
}
although not a direct answer keep in mind that there is no.requirement that _id be an ObjectID --- only that it be unique.
any valid type can be set for _I'd including an embedded object or a . you should be fine (barring any uniqueness violations) using a GUID for _id; in fact, ObjectID is really just a custom GUID.