¿Cómo puedo convertir un .NET GUID a un MongoDB ObjectID (en C#). Además, ¿puedo volver a convertirlo al mismo GUID del ObjectID?Convertir .NET Guid a MongoDB ObjectID
Respuesta
No puede convertir ObjectId
en GUID
y viceversa, porque son dos cosas diferentes (diferentes tamaños, algoritmos).
Puede usar cualquier tipo para mongoDb _id
incluyendo GUID
.
Por ejemplo, en C# piloto oficial debe especificar el atributo [BsonId]
:
[BsonId]
public Guid Id {get;set;}
[BsonId]
public int Id {get;set;}
Un BSON de objeto es un valor de 12 bytes que consiste en una marca de tiempo de 4 bytes (segundos desde época), una identificación de máquina de 3 bytes , una identificación de proceso de 2 bytes y un contador de 3 bytes . Tenga en cuenta que los campos timestamp y contador deben ser almacenados big endian a diferencia del resto de BSON. Esto se debe a que son en comparación byte a byte y queremos que garanticen un orden mayormente creciente.
GUID:
El valor de un GUID se representa como una cadena hexadecimal de 32 caracteres, como {21EC2020-3AEA-1069-A2DD-08002B30309D}, y es por lo general almacenado como un entero de 128 bits
aunque no es una respuesta directa, tenga en cuenta que no hay ningún requisito que _id sea un ObjectID --- solo que sea único.
se puede establecer cualquier tipo válido para _I incluyendo un objeto incrustado o a. Debería estar bien (salvo que se produzcan infracciones de exclusividad) utilizando un GUID para _id; de hecho, ObjectID es realmente solo un GUID personalizado.
FYI puede convertir de un oBJECTID a 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;
}
cuando he convertido Guid a ObjectId y nuevamente desde ObjectId a Guid, el resultado es diferente –
Cuando convierte un Guid a un ObjectId, realmente pierde datos. Las conversiones anteriores deben ser una conversión repetible de una vía. – MiddleTommy
Podría ser posible convertir de ObjectId a Guid y viceversa, pero sería necesario investigar un poco. No he usado ObjectId durante los últimos 4 años, así que no sé qué cambios se han realizado en ObjectId Type que necesitarían cambiar el código anterior. Debe escribir algunas pruebas para la conversión de ida y vuelta. – MiddleTommy
- 1. Cómo convertir cadenas en ObjectId
- 2. MongoDB almacenando matrices de ObjectId
- 3. Cómo convertir guid? guid
- 4. Cómo pasar ObjectId desde MongoDB en MVC.net
- 5. Convertir de RAW (16) de Oracle a GUID de .NET
- 6. Cómo convertir Guid [] a String?
- 7. Buscar un documento con ObjectID en mongoDB
- 8. cheque MongoDB Nodo si objectid es válida
- 9. Convirtiendo un Guid a Nullable Guid
- 10. ¿Cómo utilizar Mongodb ObjectID como ID de documento?
- 11. Asignación de Mongodb ObjectId hacia y desde la cadena automáticamente
- 12. Mongodb ¿Cambiar el atributo ObjectID o _id para un documento?
- 13. Cómo validar Guid en .net
- 14. ImportError: Sin módulo denominado OBJECTID
- 15. ¿Cómo convertir un GUID a una cadena en C#?
- 16. Cómo intentar convertir una cadena a un Guid
- 17. glsl fragmentshader render objectID
- 18. impulsar un nuevo valor a MongoDB gama interior - mongodb/php
- 19. .NET GUID formato de cadena en mayúsculas
- 20. Guid de orden de bytes en .NET
- 21. Cómo utilizo un guid en una consulta de shell mongodb
- 22. ID de cadena a BSON :: OBJECTID
- 23. Convierta un objeto a System Guid
- 24. GUID similar a YouTube
- 25. Node.js Cadena de Mongoose.js a la función ObjectId
- 26. Mongodb unit testing in .NET
- 27. Mongoose: ObjectId Las comparaciones no son consistentes
- 28. Cómo convertir cadenas a BSON usando el controlador MongoDB C++?
- 29. Convertir .NET Ticks a SQL Server DateTime
- 30. Cómo convertir SID a String en .net
En el caso general, no puede convertirlo de nuevo porque un GUID tiene 128 bits, mientras que un ObjectId tiene solo 96 bits. El proceso de conversión es con pérdida, y por lo tanto no reversible. –
¿Puedo simplemente establecer el _id para un documento en un GUID, y no usar el ObjectId en absoluto? – Journeyman
Norris: (descargo de responsabilidad Tengo muy poca experiencia en MongoDB) Creo que puede y Mongo no se quejará. Creo que la única razón para elegir ObjectId es ahorrar espacio. Esta otra pregunta http://stackoverflow.com/questions/4125275/mongodb-norm-and-poco podría ayudar. –