Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

160
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda