Intenté almacenar el tipo de referencia de contenido de datos por transacción por lotes, luego obtuve una excepción:
Llamada a la función WriteBatch.set() con datos no válidos. Valor de campo no admitido: un objeto personalizado (que se encuentra en pedidos de documentos/OC9dZErupEhPsamp8QEd)
¿Hay alguna manera de que podamos usar la transacción por lotes para almacenar el tipo de referencia?
este es mi código:
batch.update(orderRef, { userId: firestore.doc(userId), });Normalmente se usa update() para actualizar los datos existentes del almacén de incendios. Revise los documentos de firestore para lo mismo. En ese ejemplo dado, están actualizando la población por incrementos de valor o con un nuevo número de población, pero antes de pasarlo en cada función de actualización, los valores se almacenan en un valor de costo si no es un valor estático. como lo preguntó @dharmaraj, edite sus preguntas publicando con el código completo, también puede leer la documentación dada de firestore para sus propios estudios.
import firebase from "firebase/app"; const app = firebase.initializeApp({}); const firestore = app.firestore(); const batch = firestore.batch(); const newUserId = firestore.doc(userId); batch.update(orderRef, { userId: newUserId, });Registre el valor de newUserId y vea qué está obteniendo.
No puede almacenar el objeto de referencia que devuelve doc() , es un objeto que puede tener referencias circulares y funciones en él. doc() no es la identificación del documento. Si desea obtener la identificación (que es una cadena), entonces:
const newUserId = firestore.doc(userId).ref.id; batch.update(orderRef, { userId: newUserId, });No sé por qué la entrada de validación por lotes debería ser un objeto puro. Traté de empujar la identificación del tipo de referencia dentro del objeto anidado y luego funcionó bien, sí, sé que ya es un truco, pero funciona.
cambio:
batch.update(docRef, { user: firestore.collection('users').doc(userId) })a:
batch.update(docRef, { user: { id: firestore.collection('users').doc(userId) } })