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

217
Views
Recuperando el valor de `timestamp` de Cloud Firestore después de guardar

Digamos que estoy agregando algunos datos a Cloud Firestore:

 import { collection, addDoc, serverTimestamp } from 'firebase/firestore'; const ref = await addDoc(collection(db, 'posts'), { createdAt: serverTimestamp(), modifiedAt: null, title: 'A Title', });

Tengo reglas que exigen que createdAt igual a request.time y nunca se actualice, modifiedAt debe ser null en la creación pero igual a request.time en la actualización, y el title debe ser una cadena.

El problema surge cuando trato de actualizar este documento:

 import { doc, updateDoc } from 'firebase/firestore'; await updateDoc(ref, { createdAt: ???, // what goes here? modifiedAt: serverTimestamp(), title: 'A Title', });

Necesito createdAt para que sea el valor inicial de la marca de tiempo del servidor (como un objeto de Date ). No puedo simplemente poner serverTimestamp() porque Firestore intentará actualizar ese campo al nuevo valor de request.time y la aplicación de la regla fallará. No puedo hacer una actualización parcial (omitiendo createdAt ) porque estoy usando un ORM del lado del cliente (Ember Data), que no es capaz de manejar actualizaciones parciales como esta.

¿Hay alguna manera de recuperar el valor inicial de la serverTimestamp de tiempo del servidor después de llamar a addDoc , sin realizar una segunda solicitud inmediatamente después de addDoc para recuperar el documento que acabamos de crear? Parece innecesario hacer esa segunda solicitud, ya que ya tengo todos los datos (sin los valores de marca de tiempo). Básicamente, solo intento evitar agregar una segunda solicitud en toda la aplicación cada vez que se crea un nuevo registro.

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

0

Una operación updateDoc (a diferencia de una operación addDoc o la operación setDoc predeterminada) solo sobrescribirá las claves que realmente especifique. Entonces, para dejar createdAt tal como está, simplemente omítalo.

 await updateDoc(ref, { modifiedAt: serverTimestamp(), title: 'A Title', });

Para extraer la clave de su CRM, use delete en la clave.

 const dataToUpdate = { createdAt: "somevalue", modifiedAt: serverTimestamp(), title: 'A Title' } delete dateToUpdate.createdAt; await updateDoc(ref, dataToUpdate);

Además, agregar un getDoc inmediatamente después no es tan costoso como cree. Si su aplicación usa ese documento en cualquier parte de su aplicación (ya sea escuchando el documento en sí o su colección principal), su aplicación cliente recibirá una notificación y se le proporcionarán los datos actualizados para almacenarlos en su caché local, independientemente de si los necesita inmediatamente después de agregarlos. .

 const ref = await addDoc(collection(db, 'posts'), { createdAt: serverTimestamp(), modifiedAt: null, title: 'A Title', }); const snapshotWithServerTimestamps = await getDoc(ref);
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!