Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

158
Views
¿Cómo almaceno la actividad del usuario en firestore?

Estoy creando una aplicación de redes sociales (muy simple) y quiero almacenar la actividad del usuario en la base de datos de Firestore. Tengo una colección de "usuarios" y mantengo la identificación del usuario, el nombre de usuario del usuario, la foto de perfil del usuario allí. Pero no creo que la actividad del usuario deba almacenarse allí también (¿corríjame si me equivoco?)

Así que creé una nueva colección llamada UserActivity donde almaceno la actividad del usuario. Quería almacenar si un usuario ha estado buscando en un perfil, así que hago lo siguiente:

 const logUserSearch = async (term) => { await firebase .firestore() .collection("userActivity") .doc(firebase.auth().currentUser.uid) .collection("userSearch") .add({ term: term, date: firebase.firestore.FieldValue.serverTimestamp(), }) };

Creo que la consulta anterior resuelve el problema con los términos de búsqueda del usuario. Sin embargo, quiero almacenar si un usuario ha visitado un perfil. Así que aquí está mi pregunta: ¿cuál es la forma correcta de almacenar si un usuario visitó un perfil? ¿Debería agregar una nueva subcolección "profileVisit", algo así:

 const logProfileVisit = async (searchTerm, profileId) => { await firebase .firestore() .collection("userActivity") .doc(firebase.auth().currentUser.uid) .collection("profileVisit") .doc(profileId) .add({ source: searchTerm, date: firebase.firestore.FieldValue.serverTimestamp(), }) };

Pero entonces, ¿cómo calculo cuáles son los perfiles más "populares"? ¿Debo crear mi base de datos de otra manera, así:

 const logProfileVisit = async (searchTerm, profileId) => { await firebase .firestore() .collection("userActivity") .doc(profileId) .collection("profileVisit") .add({ user: firebase.auth().currentUser.uid source: searchTerm, date: firebase.firestore.FieldValue.serverTimestamp(), }) };

¿Para que pueda calcular fácilmente cuáles son los perfiles más "populares"? ¿Qué pasa con el caso de usuario en el que necesito calcular "los 10 mejores perfiles de fans" o algo similar? Es decir, ¿cómo calculo quién visitó tu perfil con más frecuencia?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Una colección de nivel raíz "userActivity" (o una subcolección) debería ser suficiente. Puede almacenar el tipo de actividad como un campo en lugar de subcolecciones como se muestra a continuación:

 users -> {userId} -> userActivity -> {logId} (col) (doc) (col) (doc)

Pero entonces, ¿cómo calculo cuáles son los perfiles más "populares"?

Puede almacenar un campo numérico en el documento de ese perfil y cada vez que se llame a logProfileVisit , incremente eso:

 const usersCol = firebase.firestore().collection("users") const logProfileVisit = async (searchTerm, profileId) => { await Promise.all([ usersCol .doc(currentUserId) .collection("userActivity") .add({ source: searchTerm, date: firebase.firestore.FieldValue.serverTimestamp(), type: "profileVisit" }), usersCol .doc(profileUserId) .update({ profileViews: firebase.firestore.FieldValue.increment(1), }) ]) };

También puede usar escrituras por lotes mientras actualiza estos campos para que ambas operaciones fallen o pasen.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!