Docs Menu
Docs Home
/ /

Operaciones BSON

En esta guía, puede aprender a crear documentos BSON, leer BSON desde un archivo y escribir BSON en un archivo utilizando el controlador .NET/C#.

BSON, o JSON binario, es el formato de datos que MongoDB utiliza para organizar y almacenar datos. Este formato incluye todos los tipos de estructuras de datos JSON y admite tipos como fechas, enteros de diferentes tamaños, ObjectIds y datos binarios. Para obtener una lista completa de los tipos admitidos, consulte Página del manual del servidorde tipos BSON.

Los ejemplos de código de esta guía utilizan el siguiente documento BSON como ejemplo:

{
"address" : {
"street" : "Pizza St",
"zipcode" : "10003"
},
"coord" : [-73.982419, 41.579505]
"cuisine" : "Pizza",
"name" : "Mongo's Pizza"
}

Para crear una representación de un documento BSON en C#, cree una instancia del BsonDocument Clase. El constructor BsonDocument acepta argumentos BsonElement que corresponden a los campos y valores del documento. Cada BsonElement puede ser una instancia de la clase BsonElement o un par campo-valor entre llaves ( {} ).

El siguiente ejemplo de código muestra cómo crear un objeto BsonDocument para representar el documento BSON de ejemplo. Cada par clave-valor del objeto BsonDocument es un objeto BsonElement.

var newRestaurant = new BsonDocument
{
{ "address", new BsonDocument
{
{ "street", "Pizza St" },
{ "zipcode", "10003" }
}
},
{ "coord", new BsonArray
{-73.982419, 41.579505 }
},
{ "cuisine", "Pizza" },
{ "name", "Mongo's Pizza"}
};

La clase BsonDocument incluye métodos que permiten modificar el contenido del documento BSON. El siguiente ejemplo de código realiza tres cambios en el objeto BsonDocument anterior:

  1. Agrega un nuevo campo, "restaurant_id", con el valor "12345"

  2. Elimina el campo "cuisine"

  3. Establece el valor del campo "name" en "Mongo's Pizza Palace"

var newRestaurant = new BsonDocument
{
{ "address", new BsonDocument
{
{ "street", "Pizza St" },
{ "zipcode", "10003" }
}
},
{ "coord", new BsonArray
{-73.982419, 41.579505 }
},
{ "cuisine", "Pizza" },
{ "name", "Mongo's Pizza"}
};
newRestaurant.Add(new BsonElement("restaurant_id", "12345"));
newRestaurant.Remove("cuisine");
newRestaurant.Set("name", "Mongo's Pizza Palace");

Nota

Para obtener una lista completa de los métodos de la BsonDocument clase, consulte la documentación de la API.

Puede escribir BSON en un archivo utilizando los métodos de la clase BsonBinaryWriter. Para escribir en un archivo, siga estos pasos:

  1. Abra una secuencia de archivos para el archivo que contiene datos BSON.

  2. Crea un BsonBinaryWriter usando la secuencia de archivos.

  3. Para cada documento y subdocumento BSON que desee crear, llame a WriteStartDocument().

  4. Dentro de cada documento BSON y subdocumento, llame a WriteName() para establecer el nombre del campo y al método Write* correspondiente para establecer su valor. Utiliza el método dedicado Write* que corresponde a cada tipo de datos.

  5. Para iniciar y finalizar matrices, utilice WriteStartArray() y WriteEndArray().

  6. Al final de cada documento y subdocumento, llame a WriteEndDocument().

El siguiente ejemplo de código muestra cómo escribir el documento BSON de muestra en myFile.bson:

string outputFileName = "myFile.bson";
using (var stream = File.OpenWrite(outputFileName))
using (var writer = new BsonBinaryWriter(stream))
{
writer.WriteStartDocument();
//address
writer.WriteName("address");
writer.WriteStartDocument();
writer.WriteName("street");
writer.WriteString("Pizza St");
writer.WriteName("zipcode");
writer.WriteString("10003");
writer.WriteEndDocument();
//coord
writer.WriteName("coord");
writer.WriteStartArray();
writer.WriteDouble(-73.982419);
writer.WriteDouble(41.579505);
writer.WriteEndArray();
//cuisine
writer.WriteName("cuisine");
writer.WriteString("Pizza");
//name
writer.WriteName("name");
writer.WriteString("Mongo's Pizza");
writer.WriteEndDocument();
}

El documento BSON resultante se parece al siguiente:

{
"address" : {
"street" : "Pizza St",
"zipcode" : "10003"
},
"coord" : [-73.982419, 41.579505]
"cuisine" : "Pizza",
"name" : "Mongo's Pizza"
}

Para leer un documento BSON desde un archivo, siga los mismos pasos utilizados para escribir un documento BSON en un archivo, con dos diferencias:

  • Utilice BsonBinaryReader en lugar de BsonBinaryWriter.

  • Utilice métodos Read* en lugar de métodos Write*. Estos métodos devuelven nombres de campo y valores del documento BSON.

El siguiente ejemplo de código muestra cómo leer los campos y valores del documento BSON de muestra almacenado en myFile.bson:

string inputFileName = "myFile.bson";
using (var stream = File.OpenRead(inputFileName))
using (var reader = new BsonBinaryReader(stream))
{
reader.ReadStartDocument();
//address
string addressFieldName = reader.ReadName();
reader.ReadStartDocument();
string streetFieldName = reader.ReadName();
string streetValue = reader.ReadString();
string zipFieldName = reader.ReadName();
string zipValue = reader.ReadString();
reader.ReadEndDocument();
//coord
string coordFieldName = reader.ReadName();
reader.ReadStartArray();
double coord1 = reader.ReadDouble();
double coord2 = reader.ReadDouble();
reader.ReadEndArray();
//cuisine
string cuisineFieldName = reader.ReadName();
string cuisineValue = reader.ReadString();
//name
string nameFieldName = reader.ReadName();
string nameValue = reader.ReadString();
reader.ReadEndDocument();
}

Advertencia

Si llama a ReadName() dos veces seguidas sin leer un valor, el controlador lanzará un InvalidOperationException.

Tip

Los constructores BsonBinaryReader y BsonBinaryWriter aceptan cualquier objeto System.IO.Stream. Esto significa que se puede leer o escribir en cualquier ubicación accesible mediante un flujo.

Los ejemplos anteriores muestran cómo leer y escribir datos BSON mediante las clases BsonBinaryReader y BsonBinaryWriter. Estas clases implementan las interfaces IBsonReader y IBsonWriter. Para leer y escribir datos en otros formatos, el controlador .NET/C# ofrece las siguientes implementaciones alternativas de las interfaces IBsonReader y IBsonWriter:

  • JsonReader y JsonWriter: Leer y escribir datos JSON

  • BsonDocumentReader y BsonDocumentWriter: Leer y escribir datos BSON contenidos en un objeto BsonDocument

Dado que estas clases implementan las mismas interfaces, puedes llamar a sus métodos de la misma manera que en los ejemplos BsonBinaryReader y BsonBinaryWriter anteriores.

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

GUIDs

En esta página