Estou apenas explorando o novo Firebase Firestore e ele contém um tipo de dados chamado reference
. Não está claro para mim o que isso faz.
- É como chave estrangeira?
- Pode ser usado para apontar para uma coleção localizada em outro lugar?
- Se
reference
for uma referência real, posso usá-la para consultas? Por exemplo, posso ter uma referência que aponte diretamente para o usuário, em vez de armazenar o userId em um campo de texto? E posso usar esta referência de usuário para consultar?
firebase
google-cloud-firestore
Jürgen Brandstetter
fonte
fonte
Respostas:
As referências são muito parecidas com chaves estrangeiras.
Os SDKs lançados atualmente não podem armazenar referências a outros projetos. Dentro de um projeto, as referências podem apontar para qualquer outro documento em qualquer outra coleção.
Você pode usar referências em consultas como qualquer outro valor: para filtragem, pedido e paginação (startAt / startAfter).
Diferentemente das chaves estrangeiras em um banco de dados SQL, as referências não são úteis para executar junções em uma única consulta. Você pode usá-los para pesquisas dependentes (que parecem se associar), mas tenha cuidado porque cada salto resultará em outra viagem de ida e volta ao servidor.
fonte
friends
coleção listando todos os meus amigos (friends/myId
). Então, faço referência a este documento nofriends
campo de outro documento (group/groupId
). Eu gostaria de exibir apenas meus amigos que estão nesse grupo, fazendo algo parecido com isto:where('friends.myId', '==', true)
.Adicionando abaixo o que funcionou para mim usando referências no Firestore.
Como as outras respostas dizem, é como uma chave estrangeira. O atributo de referência não retorna os dados do documento de referência. Por exemplo, eu tenho uma lista de produtos, com uma referência userRef como um dos atributos no produto. Obter a lista de produtos, fornece a referência do usuário que criou esse produto. Mas não me fornece os detalhes do usuário nessa referência. Eu usei outro back-end como um serviço com ponteiros antes, que possui um sinalizador "preencher: true" que devolve os detalhes do usuário, em vez de apenas o ID de referência do usuário, o que seria ótimo ter aqui (esperamos que uma melhoria futura )
Abaixo está um código de exemplo que eu usei para definir a referência, além de obter a lista de coleção de produtos e obter os detalhes do usuário a partir do ID de referência do usuário.
Defina uma referência em uma coleção:
Obtenha uma coleção (produtos) e todas as referências em cada documento (detalhes do usuário):
Espero que isto ajude
fonte
db.collection('products').get()
. Você já tentou obter o usuário diretamente? Eu acho quenewItem.userRef.get()
deve funcionar em vez dedb.collection("users").doc(newItem.userRef.id).get()
uid
referência e via ela.reference
se não podemos usá-lo como uma verdadeira chave estrangeira deve funcionar?reference
over astring
é que você pode chamarget()
a referência diretamente. Ainda não é muito útil. Espero que eles adicionem uma opção para preencher automaticamente as referências com os objetos correspondentes!Para quem procura uma solução Javascript para consulta por referência - o conceito é que você precisa usar um objeto 'referência de documento' na instrução de consulta
(Parabéns à resposta aqui: https://stackoverflow.com/a/53141199/1487867 )
fonte