Este blog foi publicado originalmente no site do blog pessoal de Roi Katz. Por favor clique aqui para encontrar a postagem original.
No Parte 1 Criamos nosso aplicativo pequeno, porém interessante, e até o replicamos em outro Couchbase Lite.
Mas e agora? Queremos usá-lo de fato!
Então, como usamos um banco de dados? Bem, pelo menos para "obter" os dados, você tem algumas opções:
- Obter por chave primária
- Obter por um índice (ou "selecioná-lo" onde x)
Até agora, em nosso aplicativo de exemplo simples, só podíamos usar a "chave primária" para acessar nossos dados e recuperá-los.
Mas essa não é a única maneira de obter dados do Couchbase Lite.
Nesta parte, aprenderemos os conceitos básicos da indexação do Couchbase Lite. Também conhecido como Views.
Nas exibições, executamos nossas consultas.
Portanto, precisamos:
- Criar visualização
- Executar consultas na exibição
- Obter os resultados
Criaremos nosso caso de uso - de como usar "exibições" no Couchbase Lite.
- Inicie um novo projeto WPF.
- Adicionar o pacote Nuget Couchbase.Lite
- Copie esse XAML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<botão></botão> <botão></botão> <botão></botão> <botão></botão> |
O que se traduz em
![]() |
A GUI é gerada a partir do XAML acima |
- Depois de obter a interface de usuário básica, que você poderá explorar mais tarde (nada de mais aqui, na verdade), vamos ao código propriamente dito.
Depois de iniciarmos tudo e inicializarmos o banco de dados, vamos definir nossas exibições.
Nesse caso, defini uma visualização, apenas para mostrar como configurar as coisas.
1 2 3 4 5 6 7 8 9 10 11 12 |
privado vazio Gerar visualizações() { var docsByCity = _database.Obter visualização("docs_by_city"); docsByCity.SetMap((doc, emitir) => { se (doc.Contém a chave("Cidade")) { emitir(doc["Cidade"], doc); } }, "1"); } |
O que você pode ver aqui é que, depois de recuperar um nome do _database, posso definir um mapa sobre ele.
No exemplo acima, criei uma exibição chamada "docs_by_city", atribuí um delegado, verifiquei se alguma chave ("City") existia e, em seguida, a emiti para o índice. Simples assim.
Acabamos de criar nosso índice que, para cada documento, contém uma propriedade chamada City (Cidade) - ele emite o documento inteiro, mas você pode optar por emitir o que quiser, dependendo dos requisitos do aplicativo.
Ele pode ser ajustado para melhor desempenho e menor tamanho de índice.
Além disso, você pode colocar como chave qualquer string que desejar ou compor seu índice a partir de várias propriedades para atender a necessidades especiais.
Nunca é bom armazenar o documento inteiro no índice, pois isso basicamente cria uma cópia do documento dentro do índice. Tente manter seu índice o menor possível. No entanto, se você precisar de algum tipo de índice que tenha o documento inteiro como resultado, por uma questão de desempenho, é melhor manter o documento no índice em vez de acessar a propriedade result.Document - para evitar algumas viagens de ida e volta ao banco de dados.
O número "1" aqui é a versão do índice. Durante o desenvolvimento, se você alterar a função de mapa, também precisará incrementar esse número (caso não tenha excluído todo o banco de dados) para reconstruir o índice.
Há duas consultas especiais.
- Obter a contagem de todos os documentos. (com _database.DocumentCount)
- Obter todos os documentos. (com _database.CreateAllDocumentsQuery())
Depois de definirmos nossa visualização (*index), podemos começar a escrever o código e usá-lo.
- O uso é bastante simples, com apenas 5 etapas.
- Obter a visualização
- Criar uma consulta na exibição
- Defina seus critérios no índice
- Execute-o
- Leia
No código, isso parece ainda mais simples:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
privado vazio GetByCityClick(objeto remetente, RoutedEventArgs e) { var docsByCity = _database.Obter visualização("docs_by_city"); var consulta = docsByCity.Criar Consulta(); consulta.StartKey = Cidade; consulta.EndKey = Cidade; var resultados da consulta = consulta.Executar(); Caixa de mensagem.Mostrar(string.Formato("{0} documentos foram recuperados para essa consulta", resultados da consulta.Contagem)); se (resultados da consulta.Contagem == 0) retorno; var documentos = resultados da consulta.Selecione(resultado => JsonConvert.SerializeObject(resultado.Valor, Formatação.Recuado)).ToArray(); var commaSeperaterdDocs = "[" + string.Aderir(",", documentos) + "]"; DocumentText = commaSeperaterdDocs; } |
Executo a consulta e verifico se há algum resultado.
Em seguida, eu "embelezo" o resultado (para cada valor) e o retorno como uma matriz JSON.
Preste atenção que não estou usando result.Document, mas result.Value, pois o uso de result.Document não usará o índice e consultará o banco de dados para cada resultado.
Portanto, para melhorar o desempenho, use result.key, result.value ou result.DocumentId.
Agora é só adicionar essa parte para gerar alguns dados...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
privado vazio InsertSomeDataClick(objeto remetente, RoutedEventArgs e) { var resultado = Caixa de mensagem.Mostrar("Pressione Yes para inserir alguns dados (10 documentos)!", "Confirmar", MessageBoxButton.SimNão); se (resultado == Resultado do MessageBox.Sim) { var contagem = _database.DocumentCount; string[] cidades = { "Londres", "Nova York", "Tel Aviv" }; var rnd = novo Aleatório(); para (int i = 0; i < 10; i++) { var id = "document" (documento) + (i + contagem); var índice da cidade = rnd.Próximo(0, 3); var propriedades = novo Dicionário<string, string>(); propriedades.Adicionar("name" (nome), "Roi Katz"); propriedades.Adicionar("Cidade", cidades[índice da cidade]); var doc = JsonConvert.SerializeObject(propriedades); InserirDocumento(id, doc); } Caixa de mensagem.Mostrar("10 registros inseridos"); } } |
E estamos prontos para ir!
É assim que fazemos uma visualização simples!
É claro que teremos mais informações sobre as visualizações do Couchbase lite, mas isso é apenas o começo.
É claro que precisamos criar as propriedades adequadas, portanto, para obter o projeto completo, consulte meu GitHub página.
O que é _database aqui? Estou tentando implementar as coisas acima em meu aplicativo nodeJs com o servidor couchbase e, uma vez, coloquei o nome do bucket no lugar de _database, mas não consegui fazer nada certo.