Convert.NET Guide to MongoDB ObjectID
Comment puis-je convertir un GUID.net en ObjectID MongoDB (en C#). En outre, puis-je le convertir à nouveau à la même GUID de L'ObjectID?
3 réponses
Vous ne pouvez pas convertir ObjectId
en GUID
et vice versa, parce que ce sont deux choses différentes(différentes tailles, algoritms).
vous pouvez utiliser n'importe quel type pour mongoDb _id
GUID
.
Par exemple dans officiel c# driver, vous devez spécifier l'attribut [BsonId]
:
[BsonId]
public Guid Id {get;set;}
[BsonId]
public int Id {get;set;}
UN BFILS ObjectID est de 12 octets de la valeur composé de 4 octets timestamp (secondes depuis l'époque), un 3-octet ID machine, un id de processus de 2 octets, et un Compteur de 3 octets. Notez que l' horodatage et contre les champs doivent être stocké big endian contrairement au reste de BFILS. C'est parce qu'ils sont en comparaison octet par octet, et nous voulons assurer principalement de l'augmentation de l'ordre.
GUID:
la valeur D'un GUID est représentée par 32 caractères chaîne hexadécimale, notamment {21EC2020-3AEA-1069-A2DD-08002B30309D}, et est habituellement stocké comme un 128-bits entier
pour votre information, vous pouvez convertir un objet en un 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;
}
bien que n'étant pas une réponse directe, gardez à l'esprit qu'il n'y est pas.exigence que _id soit un objectif - - - seulement qu'il soit unique.
n'importe quel type valide peut être défini pour _I'd incluant un objet incorporé ou A. vous devriez être très bien (sauf en cas de violation de l'unicité) en utilisant un GUID pour _id; en fait, ObjectID est vraiment juste un GUID personnalisé.