Обновление после вашего комментария
Вы можете добавить поле в документ users/userId
при создании документа в коллекции users/userId/theCollection
, изменив код второго представленного решения. ниже.
Просто запустите на уровне вложенной коллекции, получите родительский документ id
через объект context
и создайте его DocumentReference
на основе этого id
, как показано ниже:
exports.createCounter = functions.firestore.document('users/{userId}/theCollection/{docId}').onCreate((snap,
context) => {
const id = context.params.userId;
return admin.firestore().collection('users')
.doc(id).set({ counter: 0 }, { merge: true })
.then(() => {
console.log("Count is created! " + userId);
return null;
})
.catch((error) => {
console.error("Counter Error writing document: ", error);
return null;
});
});
Первоначальный ответ
Следующие действия должны помочь:
exports.createCounter = functions.firestore.document('users/{userId}').onCreate((snap,
context) => {
console.log('onCreate created');
const docRef = snap.ref;
return docRef.set({counter: 0}, {merge: true})
.then(() => {
console.log("Count is created! "+userId);
return null;
})
.catch((error) => {
console.error("Counter Error writing document: ", error);
return null;
});
});
Обратите внимание, что вместо выполнения snap.data.ref
, чтобы получить DocumentReference
нужно сделать snap.ref
. На самом деле snap
- это DocumentSnapshot
, и вам нужно использовать его свойство ref
.
Ваш второй фрагмент кода должен нормально работать, но вынеобходимо вернуть значение в then()
и в catch()
, чтобы указать платформе облачной функции, что работа функции завершена. Обратите внимание, что вам нужно сделать то же самое для приведенного выше кода. Я бы посоветовал вам посмотреть 3 видео о «Обещаниях JavaScript» из серии видеороликов Firebase: https://firebase.google.com/docs/functions/video-series/, которые объясняют этот ключевой момент.
exports.createCounter = functions.firestore.document('users/{userId}').onCreate((snap, context) => {
const id = context.params.userId;
console.log('onCreate created');
return admin.firestore().collection('users')
.doc(id).set({counter: 0}, {merge: true})
.then(() => {
console.log("Document successfully written! "+id);
return null;
})
.catch((error) => {
console.error("Error writing document: ", error);
return null;
});
});