Pesquisa através da ligação de argumentos de consulta de atributos de matriz

Tradução automática de Deepl

Oscampos objecto, introduzidos com 4D v15, permitem armazenar e indexar dados não estruturados. Este pode ser um conjunto comum de dados, como nome, apelido, aniversário. Podem ser dados diferentes em cada registo, tais como uma loja que precisará de atributos diferentes para sapatos (tamanho, cor), computadores (CPU, memória), impressoras (cor, tinta), uma lista de valores ou tudo em qualquer combinação.

Aqui está uma verdadeira História de Utilizador de um cliente 4D :

Aminha aplicação de crachá gere os direitos de acesso de cada pessoa a um edifício e a um espaço de tempo. Esta informação é armazenada numa base de dados como um conjunto de objectos ( por exemplo: {direito de acesso, edifício, faixa horária} ). Quero poder procurar pessoas que tenham acesso a um edifício durante um espaço de tempo”.

4D fornece várias formas de consulta de dados, usando índice e de forma extremamente rápida.

4D v16 R2 irá melhorar ainda mais o conjunto de funcionalidades, permitindo consultas ainda mais complexas dentro de uma lista de elementos num único objecto. Ao pesquisar em atributos de matriz com múltiplos argumentos de consulta unidos pelo operador AND, pode optar por obter os registos onde:

  • os argumentos de correspondência estão em pelo menos um elemento
  • os argumentos correspondentes estão no mesmo elemento (novo)

Exemplo

Vejamos um exemplo com os dois registos seguintes:

{
    "name":"martin",
    "locations": [ 
        { "kind":"home", "city":"paris" } ]
 } , {
    "name":"smith",
    "locations": [
        { "kind":"home", "city":"lyon" },
        { "kind":"office", "city":"paris" } ]
 }

Quer encontrar pessoas com uma localização do tipo “casa ” na cidade “paris”.

Os argumentos de correspondência estão em pelo menos um elemento

Se escrever:

QUERY BY ATTRIBUTE([People];[People]OB_Field; "locations[].type";=; "home";*)
QUERY BY ATTRIBUTE([People]; & ;[People]OB_Field; "locations[].city";=; "paris")

A consulta retorna martin e ferreiro porque ferreiro tem um elemento “locais” cujo tipo é“casa e cuja cidade é paris“, mesmo que não seja o mesmo elemento.

Os argumentos de correspondência estão no mesmo elemento

Se escrever:

QUERY BY ATTRIBUTE([People];[People]OB_Field; "locations[a].type";=; "home";*)
QUERY BY ATTRIBUTE([People]; & ;[People]OB_Field; "locations[a].city";=; "paris")

A consulta retorna martin porque tem um elemento locais cujotipo ” écasa ” e cuja cidade ” é paris. A consulta não retorna smith porque o valor home ” e paris não estão no mesmo elemento de matriz.

Se quiser obter apenas registos em que os argumentos correspondentes estejam no mesmo elemento, precisa de utilizar argumentos ligados. Para ligar argumentos de consulta adicione uma letra entre os [ ] no primeiro caminho para ligar e repita a mesma letra em todos os argumentos ligados.

Por exemplo: localizações[a].cidade e localizações[a].tipo. Para adicionar diferentes critérios ligados na mesma consulta, utilizar outra letra. Pode descarregar a seguinte base de dados de exemplos para ver mais exemplos.

Exemplo de base de dados

Pode também consultar a documentação 4D v16 R2 para mais detalhes:

Vanessa Talbot
• Proprietário do produto - Vanessa Talbot entrou ao time 4D Program em Junho de 2014 como Proprietária do Produto e está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Desde sua chegada, trabalhou na definição de funcionalidades chaves em 4D. Trabalhou na maioria das novas funcionalidades multithread preemptivo e também em um tema muito complexo: a nova arquitetura para a aplicação engined. Vanessa é formada pela Telecom Saint-Etienne. Começou sua carreira no Instituto de Investigação Criminal como desenvolvedora do departamento audiovisual. Também trabalhou em meios de comunicação e no âmbito médico como especialista em assistência técnica, produção e documentação de novas funcionalidades.