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?

23
demandé sur Journeyman 2011-04-01 17:32:33

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 _idGUID.

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;}

ObjectId:

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

31
répondu Andrew Orsich 2014-07-05 03:39:19

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;
    }
7
répondu MiddleTommy 2017-04-06 21:04:27

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é.

3
répondu Brendan W. McAdams 2011-04-01 13:47:03