Consulta multidimensional – SDK de JavaScript do Parse.com

Tudo bem, então deixe-me limpar o ar no início. Isso realmente não é “Multi-dimensional” no sentido de que você pode usar uma linha de consulta de código para obter os resultados desejados, mas é uma maneira de consultar uma relação de Pointer em sua classe com dados da outra classe, o Pointer está apontando para.


Nosso problema

@tyaramis levantou uma questão bastante boa sobre como ele poderia consultar todas as postagens em sua classe “Post”, mas restringi-la para que retornasse postagens apenas se o país do usuário autor fosse um determinado lugar. Em sua classe Post, ele tem uma coluna definida para ser um Pointer que aponta para a classe _User. No entanto, quando ele tentou usar o equalTo()método de consulta padrão e a notação de ponto que abordei no meu artigo Pointer Relation, ele retornou um erro. Ele estava curioso para saber como atingir seu objetivo.

Exemplo de consulta errada
query.equalTo("user.country", "USA"); // Returns error


Nossa Solução

O Parse tem uma função embutida bastante interessante para permitir esse tipo de funcionalidade que o @tyaramis precisa. Se lermos os documentos de referência do SDK do Parse JavaScript, podemos encontrar um método para nossa consulta do Parse chamado ,. Este método nos permite fornecer a ele uma consulta para corresponder ao que está dentro do ponteiro.matchQuery()

Portanto, para usar isso com nosso problema, precisamos primeiro configurar nossas consultas. Neste artigo, irei fornecer a maneira padrão de obter todas as postagens e como obter as postagens de usuários em um país específico.

// Set Up Queries to Grab Posts
var allQuery = new Parse.Query("Post");
var usaQuery = new Parse.Query("Post");

// Set Up Query to Find Specific Posts
var usaPosts = new Parse.Query("_User");
usaPosts
.equalTo('country', 'USA');

As duas primeiras consultas são para obter as postagens, precisamos de duas para que possamos ter uma consulta que pegue TODAS as postagens e uma consulta que possamos fornecer com restrições para obter postagens em que o autor é de um país específico.

Agora tudo o que falta fazer para obter todas as postagens é executar a consulta allQuerye fazer o que for necessário com os dados das postagens retornados. E para obter postagens para o país específico, tudo o que resta é fornecer a consulta com o método e, em seguida, executá-la e processar os dados como desejamos.matchQuery()

// Get all The Posts
allQuery
.find().then(function(data){
/* ... Now do whatever is desired with the post data */
});

// Get only USA Posts
usaQuery
.matchesQuery('user', usaPosts);
usaQuery
.find().then(function(data){
/* ... Now do whatever is desired with the post data, however the post data will only be from posts where the author's country is USA */
});

Oba, agora temos uma maneira de restringir as postagens que nos são retornadas, de acordo com o país de origem do usuário autor.

Informe-nos se tiver alguma dúvida e, como sempre, o código-fonte deste artigo está no meu GitHub . Para o código-fonte deste artigo, usei Estados em vez de Países.

Saúde, Zach!


Links:

Artigo de relação do ponteiro: https://coderwall.com/p/cy6cea

matchQuery()documentação: https://www.parse.com/docs/js/symbols/Parse.Query.html#matchesQuery

GitHub CoderWall Repo: https://github.com/ZachCase/CoderWall