Operações de JSON
Nesta página
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 BSON Types.
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 um documento BSON em C#, crie uma instância da classe BsonDocument
. O construtor BsonDocument
recebe argumentos do BsonElement
que correspondem aos campos e seus 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. Cada tipo de dados possui um métodoWrite*
dedicado que você deve usar.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.
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: