Me gustaría crear un juego basado en salas en el que puedas crear salas y unirte a ellas por tu cuenta. Firebases Firestore es mi elección porque es económico y fácil de implementar en React Native.
El usuario creador no debería tener que ingresar la ID de la sala deseada, pero la ID de la sala debe crearse dinámicamente. Como no quiero que el usuario que se une escriba 16 dígitos más o menos, no puedo usar la generación automática de identificaciones de documentos.
Dado que aleatorizar estas identificaciones de sala y verificar su existencia puede llevar mucho tiempo si no hay suerte, lo abordé de la siguiente manera: me gustaría realizar una consulta simple en cada documento de una colección. Ordena los documentos, limítalos y obtén el mayor número. Posteriormente, este número se incrementará y se establecerá como la nueva identificación del documento de las habitaciones. (Si hay una forma más conveniente de hacerlo, siéntase libre de sugerirla)
Hasta ahora tengo todos los documentos así:
const querySnapshot = await getDocs(collection(db, "rooms"));
Y trató de realizar una consulta sobre el resultado:
const q = query(querySnapshot, orderBy("", "asc"), limit(3));
Lo que resultó en un error Function orderBy() called with invalid data. Invalid field path (). Paths must not be empty, begin with '.', end with '.', or contain '..' .
También probé lo siguiente:
const roomsRef = db.collection('rooms') const q = query(roomsRef, orderBy("", "asc"), limit(3)); Lo que arrojó otro error: TypeError: _firebase.db.collection is not a function.
base de fuego.js:
import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore"; // Add SDKs for Firebase products that you want to use // https://firebase.google.com/docs/web/setup#available-libraries // Your web app's Firebase configuration const firebaseConfig = { apiKey: "xyz", authDomain: "xyz", projectId: "xyz", storageBucket: "xyz", messagingSenderId: "xyz", appId: "xyz", }; // Initialize Firebase const app = initializeApp(firebaseConfig); export const db = getFirestore(app);Firestore: Firebase Firestore
Se aprecia mucho la ayuda.
Editar: se me ocurrió una solución similar que no incluía ningún límite ni orden: dado que Firebase ordena los documentos de forma predeterminada, lo único que tenía que hacer era obtener el último elemento de mis documentos.
Mi solución:
const querySnapshot = await getDocs(collection(db, "rooms")); console.log(querySnapshot.docs[querySnapshot.size - 1].data());