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
BsonBinaryWriter
utilizando 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
BsonBinaryReader
em 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
:
JsonReader
eJsonWriter
: ler e gravar dados JSONBsonDocumentReader
eBsonDocumentWriter
: 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: