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 erradaquery.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 allQuery
e 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