Comment convertir un GUID .NET en un ID d'objet MongoDB (en C#). Aussi, puis-je le convertir à nouveau le même GUID à partir de l'ObjectID?Conversion de GUID .NET en ID d'objet MongoDB
Répondre
Vous ne pouvez pas convertir ObjectId
en GUID
et vice versa, car ce sont deux choses différentes (tailles différentes, algorithmes).
Vous pouvez utiliser n'importe quel type pour mongoDb _id
, y compris GUID
.
Par exemple dans le pilote officiel C#, vous devez spécifier l'attribut [BsonId]
:
[BsonId]
public Guid Id {get;set;}
[BsonId]
public int Id {get;set;}
A BSON ObjectID est une valeur de 12 octets composé d'un horodatage de 4 octets (secondes depuis l'époque), un identifiant machine de 3 octets , un identifiant de processus de 2 octets et un compteur de 3 octets. Notez que les champs d'horodatage et de compteur doivent être stockés en big endian contrairement au reste de BSON. C'est parce qu'ils sont comparés octet par octet et nous voulons assurer un ordre en grande partie croissant.
GUID:
La valeur d'un GUID est représenté sous la forme une chaîne de 32 caractères hexadécimaux, tels que {21EC2020-3AEA-1069-A2DD-08002B30309D}, et est généralement stocké sous forme de 128 bits entier
Bien que ce ne soit pas une réponse directe, gardez à l'esprit qu'il n'y a aucune exigence que _id soit un ObjectID --- seulement qu'il soit unique.
tout type valide peut être défini pour _Id incluant un objet incorporé ou un. vous devriez être bien (en excluant toute violation d'unicité) en utilisant un GUID pour _id; en fait, ObjectID est vraiment juste un GUID personnalisé.
pour votre information Vous pouvez convertir un ObjectId à 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;
}
lorsque je suis converti en Guid à ObjectId et de nouveau à partir de ObjectId vers le Guid le résultat est différent –
Lorsque vous convertissez un Guid en un ObjectId vous perdez réellement des données. Les conversions ci-dessus doivent être une conversion répétable à sens unique. – MiddleTommy
Il pourrait être possible de convertir de ObjectId à Guid et revenir, mais il faudrait faire quelques recherches. Je n'ai pas utilisé ObjectId pour les 4 dernières années, donc je ne sais pas quelles modifications ont été apportées au type ObjectId qui aurait besoin de changer le code ci-dessus. Vous devriez écrire quelques tests pour la conversion d'avant en arrière. – MiddleTommy
- 1. Utilisation de .NET Guid comme identifiant de document mongodb
- 2. Conversion de GUID en chaîne
- 3. Conversion d'un GUID en System.Drawing.Imaging.ImageFormat
- 4. Conversion d'un GUID non géré en un Guid géré^
- 5. Flex: Conversion d'un GUID en Base64
- 6. Conversion d'un Guid en Guidable Nullable
- 7. conversion id en NSString
- 8. Asp.net FormsAuthentication NomUtilisateur, ID, GUID
- 9. Conversion de guid en chaîne avec structure d'entité
- 10. conversion de mongodb en php avec 'et'
- 11. UserName ou ID utilisateur de guid?
- 12. Spring Data MongoDB: conversion BigInteger en ObjectId
- 13. Conversion vidéo en .net
- 14. GUID + ID d'incrémentation automatique = performance lente?
- 15. Génération de Mongodb Uniqie Id
- 16. Référence COM + de .Net avec GUID variable
- 17. iOS: Conversion de id en int
- 18. MongoDB avec C# .net
- 19. mongodb php findOne() par ID
- 20. Conversion de LINQ en .NET 2.0
- 21. Conversion de données efficace en utilisant .Net
- 22. conversion de pdf en xml using. NET
- 23. rapide méthode de conversion hexadécimal en .net
- 24. Conversion de routes Sinatra en .NET Routes
- 25. Conversion de JSON en collection d'objets .NET
- 26. Conversion de .net compact framework en activex
- 27. Conversion de Salesforce.com sObject [] en .NET DataSet
- 28. Conversion de HTML en Word dans .Net
- 29. Id du flux de travail du type Guid
- 30. ASP.NET fournisseur d'appartenances, GUID ID de l'utilisateur et l'espace disque
Dans le cas général, vous ne pouvez pas le reconvertir car un GUID a 128 bits, alors qu'un ObjectId n'a que 96 bits. Le processus de conversion est à perte, et donc non réversible. –
Puis-je simplement définir le _id pour un document à un GUID, et ne pas utiliser l'ObjectId du tout? – Journeyman
Norris: (avertissement J'ai très peu d'expérience MongoDB) Je pense que vous pouvez et Mongo ne se plaindra pas. Je pense que la seule raison de choisir ObjectId est de gagner de la place. Cette autre question http://stackoverflow.com/questions/4125275/mongodb-norm-and-poco pourrait aider. –