Achei que li que você pode consultar subcoleções com o novo Firebase Firestore, mas não vejo nenhum exemplo. Por exemplo, tenho meu Firestore configurado da seguinte maneira:
- Danças [coleção]
- danceName
- Músicas [coleção]
- nome da música
Como eu poderia consultar "Find all dances where songName == 'X'"
firebase
google-cloud-firestore
Nelson.b.austin
fonte
fonte
Respostas:
Atualização 07/05/2019
Hoje lançamos consultas de grupo de coleção , e elas permitem que você consulte subcoleções.
Portanto, por exemplo, no SDK da web:
Isso corresponderia a documentos em qualquer coleção em que a última parte do caminho da coleção fosse 'Músicas'.
Sua pergunta original era sobre como encontrar danças em que songName == 'X', e isso ainda não é possível diretamente, no entanto, para cada música correspondente, você pode carregar seu pai.
Resposta original
Este é um recurso que ainda não existe. É chamado de "consulta de grupo de coleção" e permite que você consulte todas as músicas, independentemente de qual dança as contém. É algo que pretendemos apoiar, mas não temos um cronograma concreto de quando acontecerá.
A estrutura alternativa neste ponto é fazer das músicas uma coleção de nível superior e fazer com que a dança da música seja parte de uma propriedade da música.
fonte
ATUALIZAR Agora o Firestore suporta array-contém
Ter esses documentos
faça assim
@ Nelson.b.austin Como a firestore ainda não tem, sugiro que você tenha uma estrutura plana, ou seja:
Assim feito, você pode fazer:
Eu espero que isso ajude.
fonte
songName_Title3: false
serve? se não estou errado, ele só pode ser usado para pesquisar danças que não tenham um nome de música específico, supondo que precisamos de umsongName_Title3: false
paradances.where("songName_"+songTitle, "==", false);
retornar tais resultados, não faria sentido para cada dança ter bandeiras booleanas para cada música possível nome ...E se você armazenar músicas como um objeto em vez de uma coleção? Cada dança como, com canções como um campo: digite Objeto (não uma coleção)
então você pode consultar todas as danças com aNameOfASong:
fonte
ATUALIZAÇÃO 2019
A Firestore lançou Consultas de grupo de coleção. Veja a resposta de Gil acima ou a documentação oficial de consulta do grupo de coleções
Resposta Anterior
Conforme afirma Gil Gilbert, parece que as consultas de grupos de coleções estão atualmente em andamento. Enquanto isso, provavelmente é melhor usar coleções de nível raiz e apenas vincular entre essas coleções usando os UIDs do documento.
Para quem ainda não sabe, Jeff Delaney tem alguns guias e recursos incríveis para quem trabalha com Firebase (e Angular) no AngularFirebase .
Modelagem de dados relacionais Firestore NoSQL - Aqui ele detalha os fundamentos da estruturação de NoSQL e Firestore DB
Modelagem de dados avançada com Firestore por exemplo - Estas são técnicas mais avançadas para manter em mente. Uma ótima leitura para aqueles que desejam levar suas habilidades Firestore para o próximo nível
fonte
NOVA ATUALIZAÇÃO 8 de julho de 2019:
fonte
Você sempre pode pesquisar assim: -
fonte
fonte
fonte
Poderia ser melhor usar uma estrutura de dados simples.
Os documentos especificam os prós e os contras das diferentes estruturas de dados nesta página .
Especificamente sobre as limitações de estruturas com sub-coleções:
Comparado com as supostas vantagens de uma estrutura de dados simples:
fonte
Eu encontrei uma solução. Por favor, checar isto.
E então você pode ver as guias Dados, Regras, Índices e Uso em seu Cloud Firestore em console.firebase.google.com. Finalmente, você deve definir índices na guia índices.
Preencha o ID da coleção e algum valor de campo aqui. Em seguida, selecione a opção de grupo de coleta. Aproveite. obrigado
fonte
Estou trabalhando com Observables aqui e o wrapper AngularFire, mas foi assim que consegui fazer isso.
É meio louco, ainda estou aprendendo sobre observáveis e possivelmente exagerei. Mas foi um bom exercício.
Alguma explicação (não é um especialista RxJS):
in
consulta.Copiei, colei meu código e alterei os nomes das variáveis para o seu, não tenho certeza se há algum erro, mas funcionou bem para mim. Avise-me se encontrar algum erro ou se puder sugerir uma maneira melhor de testá-lo com talvez algum Firestore simulado.
fonte