O que é o LiteDB?
O LiteDB é um banco de dados NoSQL desenvolvido e mantido pelos brasileiros Mauricio David, Cassiano Sombrio e Leonardo Nascimento.
Features
- Não necessita de um servidor de documentos NoSQL
- Possui uma API simples muito semelhante ao do MongoDB
- Suporte para Portable UWP/PCL
- Recuperação de dados após falha de gravação
- Criptografia de arquivo de dados usando criptografia DES (AES)
- Transações ACID (atomicidade, consistência, isolamento e durabilidade)
- Recuperação de dados após falha de gravação (journal mode)
- Mapeie suas classes POCO para o BsonDocument usando atributos ou usando Fluent Mapper API
- Armazenar arquivos e dados de fluxo (como GridFS no MongoDB)
- Armazenamento de arquivos de dados simples (como SQLite)
- Indexação de campos dos documentos para pesquisa rápida (até 16 índices por coleção)
- Suporte a consultas LINQ
- Shell de comando
Fontes: Blog Raphael Cardoso e LiteDB
Setup
Baixe e instale o .NET 5
Criando uma API integrada com o LiteDB
Para criar um projeto Web API, basta digitar o seguinte comando:
dotnet new webapi
Após a criação do projeto, iremos adicionar o seguinte pacote:
dotnet add package LiteDB --version 5.0.10
Agora, vamos adicionar as seguintes classes para que o nosso CRUD funcione:

Para não deixar o artigo muito longo, aqui estão os links das classes criadas:
Pasta “Common”:
Config.cs
Constants.cs
ILiteDBContext.cs
LiteDBContext.cs
LiteDBExtensions.cs
Pasta “Controller”:
CustomerController.cs
Pasta “Models”:
Customer.cs
Pasta “Services”:
ILiteDBServices.cs
LiteDBService.cs
Repare que a classe “LiteDBExtensions.cs”, está sendo usada para facilitar a manutenção e legibilidade do código.

Esses dois métodos de extensão criados são utilizados dentro da classe “Startup.cs”.

Testando nossos endpoints
Primeiro, vamos iniciar a nossa API através do comando:
dotnet run
Agora, vamos fazer um requisição POST para inserir uma informação em nosso banco de dados:



Após a requisição POST, vamos verificar, por meio da requisição GET, se a informação foi realmente inserida:



Repare que este método retorna todas as informações, pois não foi especificado um “Id” na hora da requisição.
Para retornar um cadastro específico, basta informar o “Id”:



Pronto! Temos nosso primeiro cadastro realizado. Se quisermos alterá-lo ou excluí-lo, temos um endpoint para cada função.






Mas, então, onde as informações estão sendo salvas?
As informações são salvas em um arquivo “.db” localizado dentro do seu projeto:

As classes de “services” e “context” fazem o trabalho de buscar e inserir as informações dentro do arquivo.
O nome do arquivo é definido da seguinte maneira:

Conclusão
Como podemos perceber, o LiteDB pode ser usado em diversas situações e projetos. Cabe a você decidir onde e quando usá-lo.
Espero que você tenha gostado. Dúvidas, sugestões ou críticas, deixe nos comentários.
Um grande abraço!