Można policzyć, ile elementów kolekcja używa nowej bazy danych firewall, firewall?Liczba kolekcji firewalli Firebase
Jeśli tak, jak mogę to zrobić?
Można policzyć, ile elementów kolekcja używa nowej bazy danych firewall, firewall?Liczba kolekcji firewalli Firebase
Jeśli tak, jak mogę to zrobić?
O ile mi wiadomo, nie ma w tym celu wbudowanego rozwiązania i jest to teraz możliwe tylko w węźle sdk. Jeśli masz
db.collection ('someCollection')
można użyć
.Wybrać pola ([])
aby określić, które pola chcesz wybrać. Jeśli zrobisz pusty select(), po prostu otrzymasz tablicę odniesień do dokumentów.
przykład:
db.collection('someCollection').select().get().then( (snapshot) => console.log(snapshot.docs.length) );
To rozwiązanie jest tylko optymalizacja dla najgorszego przypadku pobierania wszystkie dokumenty i nie skalować na dużych zbiorów!
Mają również spojrzeć na to:
How to get a count of number of documents in a collection with Cloud Firestore
Nie, nie ma wbudowanego wsparcia dla kwerend agregujących teraz. Jest jednak kilka rzeczy, które możesz zrobić.
Pierwsza to documented here. Za pomocą transakcji lub funkcji chmurowych można przechowywać informacje zbiorcze:
Ten przykład pokazuje, jak korzystać z funkcji, aby śledzić liczbę ocen w podkolektorach, a także średnią ocenę.
exports.aggregateRatings = firestore
.document('restaurants/{restId}/ratings/{ratingId}')
.onWrite(event => {
// Get value of the newly added rating
var ratingVal = event.data.get('rating');
// Get a reference to the restaurant
var restRef = db.collection('restaurants').document(event.params.restId);
// Update aggregations in a transaction
return db.transaction(transaction => {
return transaction.get(restRef).then(restDoc => {
// Compute new number of ratings
var newNumRatings = restDoc.data('numRatings') + 1;
// Compute new average rating
var oldRatingTotal = restDoc.data('avgRating') * restDoc.data('numRatings');
var newAvgRating = (oldRatingTotal + ratingVal)/newNumRatings;
// Update restaurant info
return transaction.update(restRef, {
avgRating: newAvgRating,
numRatings: newNumRatings
});
});
});
});
Rozwiązanie, o którym wspomniał jbb, jest również użyteczne, jeśli chcesz tylko liczyć dokumenty sporadycznie. Upewnij się, że używasz instrukcji select()
, aby uniknąć pobierania wszystkich dokumentów (to dużo przepustowości, gdy potrzebujesz tylko liczby). select()
jest teraz dostępny tylko w pakietach SDK na serwerze, aby rozwiązanie nie działało w aplikacji mobilnej.
Najprostszym sposobem zrobienia tego jest odczytanie rozmiaru "querySnapshot".
db.collection("cities").get().then(function(querySnapshot) {
console.log(querySnapshot.size);
});
Możesz również odczytać długość tablicy docs wewnątrz "querySnapshot".
querySnapshot.docs.length;
Lub jeśli "querySnapshot" jest pusty, odczytując pustą wartość, która zwróci wartość logiczną.
querySnapshot.empty;
Pamiętaj, że każdy dokument "kosztuje" jeden odczyt.Jeśli w ten sposób policzysz 100 przedmiotów w kolekcji, zostanie naliczona opłata za 100 odczytów! – Georg
Prawidłowo, ale nie ma innego sposobu na zsumowanie liczby dokumentów w kolekcji. A jeśli już pobrałeś kolekcję, odczytanie tablicy "docs" nie będzie wymagało więcej pobierania, więc nie będzie "kosztować" więcej odczytów. – Ompel
To czyta wszystkie dokumenty w pamięci! Powodzenia w tym dla dużych zbiorów danych ... –
Można używać funkcji chmury ogniowej do śledzenia liczby dokumentów w kolekcji. Aby uzyskać więcej informacji, zobacz: https://firebase.google.com/docs/functions
Możliwy duplikat [Jak uzyskać liczbę dokumentów w kolekcji w Cloud Firestore] (https://stackoverflow.com/questions/46553314/how-to -get-a-liczba-dokumentów-w-kolekcji-w-chmurze-firestore) –