Do czego służy typ danych "Reference" Firebase Firestore?
[2]}właśnie odkrywam nową bazę Firebase Firestore i zawiera ona typ danych o nazwie reference
. Nie jest dla mnie jasne, co to robi.
- czy to jak obcy klucz?
- czy można go użyć do wskazania zbioru, który znajduje się gdzieś indziej?
- Jeśli {[0] } jest rzeczywistym odniesieniem, czy mogę go użyć do zapytań? Na przykład Czy Mogę mieć odniesienie, które wskazuje bezpośrednio na użytkownika, zamiast przechowywać identyfikator użytkownika w polu tekstowym? I czy mogę użyć tego użytkownika Referencja do zapytań?
4 answers
Odniesienia są bardzo podobne do kluczy obcych.
Aktualnie wydane zestawy SDK nie mogą przechowywać odniesień do innych projektów. W ramach projektu odniesienia mogą wskazywać na dowolny inny dokument w dowolnym innym zbiorze.
Możesz używać referencji w zapytaniach jak każda inna wartość: do filtrowania, zamawiania i stronicowania (startAt/startAfter).
W przeciwieństwie do kluczy obcych w bazie danych SQL, referencje nie są przydatne do wykonywania połączeń w jednym zapytaniu. Można ich używać w zależności poszukaj (które wydają się dołączać), ale bądź ostrożny, ponieważ każdy skok spowoduje kolejną podróż w obie strony do serwera.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-01 22:08:59
Dodanie poniżej tego, co mi się udało, używając referencji w Firestore.
Jak mówią inne odpowiedzi, to jest jak obcy klucz. Atrybut reference nie zwraca jednak danych dokumentu reference. Na przykład, mam listę Produktów, z referencją userRef jako jednym z atrybutów na produkcie. Uzyskanie listy produktów daje mi odniesienie do użytkownika, który stworzył ten produkt. Ale nie podaje mi szczegółów użytkownika w tym odnośniku. Użyłem innego zaplecza jako usługi ze wskaźnikami wcześniej mają flagę "wypełniać: prawda", która daje dane użytkownika z powrotem, a nie tylko identyfikator referencyjny użytkownika, co byłoby wspaniale mieć tutaj (miejmy nadzieję, że w przyszłości poprawa).
Poniżej znajduje się przykładowy kod, którego użyłem, aby ustawić referencję, a także uzyskać listę kolekcji produktów, a następnie uzyskać dane użytkownika z podanego identyfikatora referencyjnego użytkownika.
Ustaw referencję na zbiorze:
let data = {
name: 'productName',
size: 'medium',
userRef: db.doc('users/' + firebase.auth().currentUser.uid)
};
db.collection('products').add(data);
Pobierz kolekcję (produkty) i wszystkie odniesienia na każdym dokumencie (dane użytkownika):
db.collection('products').get()
.then(res => {
vm.mainListItems = [];
res.forEach(doc => {
let newItem = doc.data();
newItem.id = doc.id;
if (newItem.userRef) {
newItem.userRef.get()
.then(res => {
newItem.userData = res.data()
vm.mainListItems.push(newItem);
})
.catch(err => console.error(err));
} else {
vm.mainListItems.push(newItem);
}
});
})
.catch(err => { console.error(err) });
Hope this helps
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-24 16:16:59
Dla tych, którzy szukają rozwiązania Javascript do zapytań przez odniesienie-koncepcja polega na tym, że musisz użyć obiektu "document reference" w instrukcji zapytania
teamDbRef = db.collection('teams').doc('CnbasS9cZQ2SfvGY2r3b'); /* CnbasS9cZQ2SfvGY2r3b being the collection ID */
//
//
db.collection("squad").where('team', '==', teamDbRef).get().then((querySnapshot) => {
//
}).catch(function(error) {
//
});
(Chwała odpowiedzi tutaj: https://stackoverflow.com/a/53141199/1487867 )
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-19 20:50:54
Według # AskFirebase https://youtu.be/Elg2zDVIcLo?t=276 głównym przypadkiem użycia na razie jest link w Firebase console UI
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-21 08:19:52