Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

uKAFSMongo

Biblioteca Delphi/FireMonkey que fornece operações de CRUD para MongoDB. Possui opção de cooldown para regular a frequência das operações, permanecendo dentro dos limites dos planos do MongoDB Atlas.

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate this project.

README

image

uKAFSMongo

Biblioteca Delphi/FireMonkey que fornece operações de CRUD para MongoDB.

Possui opção de cooldown para regular a frequência das operações, permanecendo dentro dos limites dos planos do MongoDB Atlas.

)

⚠️ Dependências externas

Esta biblioteca utiliza a seguinte unit externa que deve ser adicionada ao projeto:

*Pode ser usado FDConnection manualmente configurado no lugar de TKAFSConexaoMongo, necessitando apenas de algumas modificações simples no código.

⚡ Chamada - Inserir dados

pascal
procedure InserirDados(const _resfriamento: Integer; const _base, _colecao: String; const _dados: TJSONArray);

🏛️ Exemplo de chamada:

pascal
var _dadosinserir := TJSONArray.Create;
var _novousuario: TJSONObject;
try
  // Primeiro documento
  _novousuario := TJSONObject.Create;
  _novousuario.AddPair('nome', 'João Silva');
  _novousuario.AddPair('email', 'joao@empresa.com');
  _novousuario.AddPair('data_nascimento', TJSONNumber.Create(831456000)); // Unix: 01/05/1996
  _novousuario.AddPair('departamento', 'TI');
  _novousuario.AddPair('salario', TJSONNumber.Create(4500.00));
  _novousuario.AddPair('ativo', TJSONBool.Create(True));
  _dadosinserir.AddElement(_novousuario);

  // Segundo documento
  _novousuario := TJSONObject.Create;
  _novousuario.AddPair('nome', 'Maria Santos');
  _novousuario.AddPair('email', 'maria@empresa.com');
  _novousuario.AddPair('data_nascimento', TJSONNumber.Create(713808000)); // Unix: 15/08/1992
  _novousuario.AddPair('departamento', 'TI');
  _novousuario.AddPair('salario', TJSONNumber.Create(5200.00));
  _novousuario.AddPair('ativo', TJSONBool.Create(True));
  _dadosinserir.AddElement(_novousuario);

  // Adicione quantos documentos forem necessários...

  // Executa inserção
  InserirDados(QUALQUER_VALOR_EM_MILISEGUNDOS, 'nome_base', 'nome_coleção', _dadosinserir);
  // Resfriamento 0 = Sem fila nem cooldown, executa em tempo real
  // Resfriamento QUALQUER_VALOR_EM_MILISEGUNDOS = Entra na fila e respeita-se o tempo de cooldown 

  ShowMessage('Dados inseridos com sucesso!');
finally
  FreeAndNil(_dadosinserir);
end;

⚡ Chamada - Editar dados

pascal
procedure EditarDados(const _resfriamento: Integer; const _base, _colecao, _filtros: String; const _dados: TJSONArray);

🏛️ Exemplo de chamada:

pascal
var _filtros := '{"$and": [{"departamento": "TI"}, {"data_nascimento": {"$lte": 788918400}}]}'; // Nascidos antes de 1995
var _dadosatualizar := TJSONArray.Create;
var _camposatualizar: TJSONObject;
try
  _camposAtualizar := TJSONObject.Create;
  _camposAtualizar.AddPair('salario', TJSONNumber.Create(5500.00));
  _camposAtualizar.AddPair('nivel', 'Sênior');
  _camposAtualizar.AddPair('ultima_promocao', FormatDateTime('yyyy-mm-dd', Now));
  _dadosatualizar.AddElement(_camposatualizar);

  // Adicione quantos documentos forem necessários...

  // Executa edição
  EditarDados(QUALQUER_VALOR_EM_MILISEGUNDOS, 'nome_base', 'nome_coleção', _filtros, _dadosatualizar);
  // Resfriamento 0 = Sem fila nem cooldown, executa em tempo real
  // Resfriamento QUALQUER_VALOR_EM_MILISEGUNDOS = Entra na fila e respeita-se o tempo de cooldown 

  ShowMessage('Dados editados com sucesso!');
finally
  FreeAndNil(_dadosatualizar);
end;

⚡ Chamada - Buscar dados

pascal
function BuscarDados(const _resfriamento: Integer; const _base, _colecao, _filtros, _projecoes: String): TJSONArray;

🏛️ Exemplo de chamada:

pascal
var _resultados: TJSONArray;
var _filtros := '{"departamento": "TI"}';
var _projecoes := '{"nome": 1, "email": 1, "data_nascimento": 1, "salario": 1, "nivel": 1, "_id": 0}';
var _dadosusuario: TJSONObject;
var _dataNasc: TDateTime;
try
  // Executa busca
  var _resultados := BuscarDados(QUALQUER_VALOR_EM_MILISEGUNDOS, 'nome_base', 'nome_coleção', _filtros, _projecoes);
  // Resfriamento 0 = Sem fila nem cooldown, executa em tempo real
  // Resfriamento QUALQUER_VALOR_EM_MILISEGUNDOS = Entra na fila e respeita-se o tempo de cooldown
    
  // Varre o resultado
  for var I := 0 to _resultados.Count - 1 do
  begin
    _dadosusuario := _resultados.Items[I] as TJSONObject;
      
    ShowMessage(Format('%s (%s) - Nascimento: %s - Salário: R$ %.2f - Nível: %s', 
      [_dadosusuario.GetValue('nome').Value,
       _dadosusuario.GetValue('email').Value,
       FormatDateTime('dd/mm/yyyy', UnixToDateTime(_dadosusuario.GetValue('data_nascimento').Value.ToInteger)),
       _dadosusuario.GetValue('salario').Value.ToDouble,
       _dadosusuario.GetValue('nivel', 'Não definido')]));
  end;
    
  ShowMessage(Format('Encontrados %d funcionários de TI', [_resultados.Count]));
finally
  FreeAndNil(_resultados);
end;

📜 Exemplo de resposta:

json
[
  {
    "nome": "João Silva",
    "email": "joao@empresa.com",
    "data_nascimento": 831456000,
    "salario": 4500.00
  },
  {
    "nome": "Maria Santos",
    "email": "maria@empresa.com", 
    "data_nascimento": 713808000,
    "salario": 5500.00,
    "nivel": "Sênior"
  }
]

⚡ Método - Excluir dados

pascal
procedure ExcluirDados(const _resfriamento: Integer; const _base, _colecao, _filtros: String);

🏛️ Exemplo de consumo no cliente:

pascal
// Excluir usuários inativos OU com salário muito baixo
var _filtros := '{"$or": [{"ativo": false}, {"salario": {"$lt": 2000}}]}';
ExcluirDados(QUALQUER_VALOR_EM_MILISEGUNDOS,'nome_base', 'nome_coleção', _filtros);
// Resfriamento 0 = Sem fila nem cooldown, executa em tempo real
// Resfriamento QUALQUER_VALOR_EM_MILISEGUNDOS = Entra na fila e respeita-se o tempo de cooldown

*A exclusão é PERMANENTE. Sempre teste os filtros com BuscarDados antes de executar ExcluirDados!


Nota: Este componente é parte do ecossistema KAFS para integração com MongoDB. Requer configuração prévia do MongoDB Atlas através do componente TKAFSConexaoMongo ou da configuração manual de um FDConnection e das credenciais apropriadas para funcionamento completo. Todos os filtros e projeções seguem o padrão do MongoDB.