Visão geral
Neste guia, você pode aprender a criar documentos BSON, ler BSON de um arquivo e gravar BSON em um arquivo usando o driver .NET/C#.
Formato de dados JSON
BSON, ou Binary JSON, é o formato de dados que o MongoDB utiliza para organizar e armazenar dados. Este formato de dados inclui todos os tipos de estrutura de dados JSON e adiciona suporte para tipos incluindo datas, inteiros de tamanhos diferentes, ObjectIds e dados binários. Para obter uma lista completa dos tipos compatíveis, consulte a página de manual do servidor Tipos BSON.
As amostras de código neste guia usam o seguinte documento BSON como exemplo:
{ "address" : { "street" : "Pizza St", "zipcode" : "10003" }, "coord" : [-73.982419, 41.579505] "cuisine" : "Pizza", "name" : "Mongo's Pizza" }
Crie um documento BSON
Para construir uma representação de um documento BSON em C#, crie uma instância da classe BsonDocument. O construtor BsonDocument recebe argumentos do BsonElement que correspondem aos campos e aos valores no documento. Cada BsonElement pode ser uma instância da classe BsonElement ou um par de valor de campo entre chaves ( {} ).
A seguinte amostra de código mostra como criar um objeto BsonDocument para representar o exemplo de documento BSON. Cada par de valores-chave no objeto BsonDocument é um 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"} };
Altere um documento BSON
A classe BsonDocument inclui métodos que permitem a você alterar o conteúdo do documento BSON. A seguinte amostra de código faz três alterações no objeto BsonDocument anterior:
Adiciona um novo campo,
"restaurant_id", com o valor"12345"Remove o campo
"cuisine"Define o valor do campo
"name"como"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");
Observação
Para obter uma lista completa dos métodos da classe BsonDocument, consulte a documentação da API.
Grave BSON em um arquivo
Você pode gravar BSON em um arquivo utilizando os métodos na classe BsonBinaryWriter. Para gravar em um arquivo, execute as seguintes etapas:
Abra um fluxo de arquivo para o arquivo com dados no formato BSON.
Crie um
BsonBinaryWriterutilizando o fluxo de arquivo.Para cada documento BSON e subdocumento que você deseja criar, chame a função
WriteStartDocument().Dentro de cada documento e subdocumento BSON, chame a função
WriteName()para definir o nome do campo e o métodoWrite*apropriado para definir seu valor. Utilize o métodoWrite*dedicado que corresponde a cada tipo de dados.Para iniciar e finalizar arrays, use
WriteStartArray()eWriteEndArray().No final de cada documento e subdocumento, chame
WriteEndDocument().
A seguinte amostra de código ilustra como gravar a amostra de documento BSON em 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(); }
O documento BSON resultante é apresentado assim:
{ "address" : { "street" : "Pizza St", "zipcode" : "10003" }, "coord" : [-73.982419, 41.579505] "cuisine" : "Pizza", "name" : "Mongo's Pizza" }
Leia BSON de um arquivo
Para ler um documento BSON de um arquivo, siga estas etapas, semelhantes às usadas para gravar um documento BSON no arquivo, mas com duas diferenças:
Use
BsonBinaryReaderem vez deBsonBinaryWriter.Use métodos
Read*em vez de métodosWrite*. Esses métodos retornam nomes de campo e valores do documento BSON.
A seguinte amostra de código mostra como ler os campos e valores a partir do documento BSON de amostra armazenado no 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(); }
Aviso
Se você chamar a função ReadName() duas vezes seguidas sem ler um valor, o driver gerará um InvalidOperationException.
Dica
Os construtores BsonBinaryReader e BsonBinaryWriter aceitam qualquer objeto System.IO.Stream . Isso significa que você pode ler ou gravar em qualquer local que possa ser acessado por um stream.
Ler e escrever outros formatos
Os exemplos anteriores mostram como ler e escrever dados BSON utilizando as classes BsonBinaryReader e BsonBinaryWriter. Estas classes implementam as interfaces IBsonReader e IBsonWriter. Para ler e gravar dados em outros formatos, o driver .NET/C# fornece as seguintes implementações alternativas das interfaces IBsonReader e IBsonWriter:
JsonReadereJsonWriter: ler e gravar dados JSONBsonDocumentReadereBsonDocumentWriter: ler e gravar dados BSON contidos em um objetoBsonDocument
Como essas classes implementam as mesmas interfaces, você pode chamar seus métodos da mesma forma que os exemplos BsonBinaryReader e BsonBinaryWriter anteriores.
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: