Banco de Dados de Documentos - Inserir Documento
Neste capítulo, vamos trabalhar com documentos reais em uma coleção. Você pode criar documentos usando o portal do Azure ou .Net SDK.
Criação de documentos com o Portal do Azure
Vamos dar uma olhada nas etapas a seguir para adicionar documentos à sua coleção.
Step 1 - Adicionar novas famílias de coleção do nível de preços S1 em myfirstdb.
Step 2 - Selecione a coleção Famílias e clique na opção Criar Documento para abrir a folha Novo Documento.
Este é apenas um editor de texto simples que permite digitar qualquer JSON para um novo documento.
Step 3 - Como esta é a entrada de dados brutos, vamos inserir nosso primeiro documento.
{
"id": "AndersenFamily",
"lastName": "Andersen",
"parents": [
{ "firstName": "Thomas", "relationship": "father" },
{ "firstName": "Mary Kay", "relationship": "mother" }
],
"children": [
{
"firstName": "Henriette Thaulow",
"gender": "female",
"grade": 5,
"pets": [ { "givenName": "Fluffy", "type": "Rabbit" } ]
}
],
"location": { "state": "WA", "county": "King", "city": "Seattle"},
"isRegistered": true
}
Ao entrar no documento acima, você verá a tela a seguir.
Observe que fornecemos um id para o documento. O valor de id é sempre obrigatório e deve ser exclusivo em todos os outros documentos da mesma coleção. Quando você o deixa de fora, o Banco de Dados de Documentos gera automaticamente um para você usando um GUID ou um Identificador Globalmente Único.
O id é sempre uma string e não pode ser um número, data, booleano ou outro objeto, e não pode ter mais de 255 caracteres.
Observe também a estrutura hierárquica do documento, que possui algumas propriedades de nível superior, como o id necessário, bem como lastName e isRegistered, mas também possui propriedades aninhadas.
Por exemplo, a propriedade Parents é fornecida como uma matriz JSON conforme denotado pelos colchetes. Também temos outro array para filhos, embora haja apenas um filho no array neste exemplo.
Step 4 - Clique no botão 'Salvar' para salvar o documento e criamos nosso primeiro documento.
Como você pode ver, uma boa formatação foi aplicada ao nosso JSON, que divide cada propriedade em sua própria linha recuada com um espaço em branco para transmitir o nível de aninhamento de cada propriedade.
O portal inclui um Explorador de Documentos, então vamos usá-lo agora para recuperar o documento que acabamos de criar.
Step 5- Escolha um banco de dados e qualquer coleção dentro do banco de dados para visualizar os documentos dessa coleção. Atualmente, temos apenas um banco de dados chamado myfirstdb com uma coleção chamada Famílias, ambas pré-selecionadas aqui nos menus suspensos.
Por padrão, o Document Explorer exibe uma lista não filtrada de documentos na coleção, mas você também pode pesquisar qualquer documento específico por ID ou vários documentos com base em uma pesquisa curinga de um ID parcial.
Temos apenas um documento em nossa coleção até agora e vemos seu ID na tela a seguir, AndersonFamily.
Step 6 - Clique no ID para visualizar o documento.
Criação de documentos com o .NET SDK
Como você sabe, os documentos são apenas outro tipo de recurso e você já se familiarizou com como tratar os recursos usando o SDK.
A única grande diferença entre documentos e outros recursos é que, obviamente, eles não têm esquemas.
Portanto, existem muitas opções. Naturalmente, você pode apenas trabalhar com gráficos de objetos JSON ou até mesmo strings brutas de texto JSON, mas também pode usar objetos dinâmicos que permitem vincular a propriedades em tempo de execução sem definir uma classe em tempo de compilação.
Você também pode trabalhar com objetos C # reais, ou Entities, como são chamados, que podem ser suas classes de domínio de negócios.
Vamos começar a criar documentos usando .Net SDK. A seguir estão as etapas.
Step 1 - Instancie o DocumentClient, então iremos consultar o banco de dados myfirstdb e, em seguida, consultar a coleção MyCollection, que armazenamos nesta coleção de variáveis privadas para que seja acessível em toda a classe.
private static async Task CreateDocumentClient() {
// Create a new instance of the DocumentClient
using (var client = new DocumentClient(new Uri(EndpointUrl), AuthorizationKey)) {
database = client.CreateDatabaseQuery("SELECT * FROM c WHERE c.id =
'myfirstdb'").AsEnumerable().First();
collection = client.CreateDocumentCollectionQuery(database.CollectionsLink,
"SELECT * FROM c WHERE c.id = 'MyCollection'").AsEnumerable().First();
await CreateDocuments(client);
}
}
Step 2 - Crie alguns documentos na tarefa CreateDocuments.
private async static Task CreateDocuments(DocumentClient client) {
Console.WriteLine();
Console.WriteLine("**** Create Documents ****");
Console.WriteLine();
dynamic document1Definition = new {
name = "New Customer 1", address = new {
addressType = "Main Office",
addressLine1 = "123 Main Street",
location = new {
city = "Brooklyn", stateProvinceName = "New York"
}, postalCode = "11229", countryRegionName = "United States"
},
};
Document document1 = await CreateDocument(client, document1Definition);
Console.WriteLine("Created document {0} from dynamic object", document1.Id);
Console.WriteLine();
}
O primeiro documento será gerado a partir deste objeto dinâmico. Isso pode parecer JSON, mas é claro que não é. Este é o código C # e estamos criando um objeto .NET real, mas não há definição de classe. Em vez disso, as propriedades são inferidas da maneira como o objeto é inicializado.
Observe que não fornecemos uma propriedade Id para este documento.
Agora, vamos dar uma olhada em CreateDocument. Parece o mesmo padrão que vimos para a criação de bancos de dados e coleções.
private async static Task<Document> CreateDocument(DocumentClient client,
object documentObject) {
var result = await client.CreateDocumentAsync(collection.SelfLink, documentObject);
var document = result.Resource;
Console.WriteLine("Created new document: {0}\r\n{1}", document.Id, document);
return result;
}
Step 3- Desta vez, chamamos CreateDocumentAsync especificando o SelfLink da coleção à qual queremos adicionar o documento. Recebemos uma resposta com uma propriedade de recurso que, neste caso, representa o novo documento com suas propriedades geradas pelo sistema.
O objeto Document é uma classe definida no SDK que herda do recurso e, portanto, tem todas as propriedades de recurso comuns, mas também inclui as propriedades dinâmicas que definem o próprio documento sem esquema.
private async static Task CreateDocuments(DocumentClient client) {
Console.WriteLine();
Console.WriteLine("**** Create Documents ****");
Console.WriteLine();
dynamic document1Definition = new {
name = "New Customer 1", address = new {
addressType = "Main Office",
addressLine1 = "123 Main Street",
location = new {
city = "Brooklyn", stateProvinceName = "New York"
}, postalCode = "11229", countryRegionName = "United States"
},
};
Document document1 = await CreateDocument(client, document1Definition);
Console.WriteLine("Created document {0} from dynamic object", document1.Id);
Console.WriteLine();
}
Quando o código acima for compilado e executado, você receberá a seguinte saída.
**** Create Documents ****
Created new document: 34e9873a-94c8-4720-9146-d63fb7840fad {
"name": "New Customer 1",
"address": {
"addressType": "Main Office",
"addressLine1": "123 Main Street",
"location": {
"city": "Brooklyn", "stateProvinceName": "New York"
},
"postalCode": "11229", "countryRegionName": "United States"
},
"id": "34e9873a-94c8-4720-9146-d63fb7840fad",
"_rid": "Ic8LAMEUVgACAAAAAAAAAA==",
"_ts": 1449812756,
"_self": "dbs/Ic8LAA==/colls/Ic8LAMEUVgA=/docs/Ic8LAMEUVgACAAAAAAAAAA==/",
"_etag": "\"00001000-0000-0000-0000-566a63140000\"",
"_attachments": "attachments/"
}
Created document 34e9873a-94c8-4720-9146-d63fb7840fad from dynamic object
Como você pode ver, não fornecemos um Id, no entanto, o Banco de Dados de Documentos gerou este para nós para o novo documento.