Синтаксис пути подстановочного знака, который вы используете (т. Е. doc('releasedQuestions/{qid}')
), может использоваться только в облачных функциях definition , когда, например, вы определяете триггер Cloud Firestore, указывая путь к документу и событие введите, как показано ниже:
exports.useWildcard = functions.firestore
.document('users/{userId}')
.onWrite((change, context) => {...});
В вашем случае вы фактически вызываете метод doc()
, для которого параметр documentPath
должен быть string
. Вот почему он работает в первом случае, но не во втором (в вашей коллекции нет документа Firestore с идентификатором {qid}
).
Если вы хотите, в вашем HTTP Cloud Функция, чтобы обновить все документы коллекции, вы можете использовать пакетную запись следующим образом:
exports.decreaseQuestionRestDuration = functions.https.onRequest((request, response) => {
const db = admin.firestore();
db.collection('releasedQuestions').get()
.then(snapshot => {
let batch = db.batch();
snapshot.forEach(doc => {
batch.update(doc.ref, { restDuration: 42 });
});
return batch.commit()
})
.then(() => {
response.send(0)
})
.catch(error => {
console.log(error)
response.status(500).send(error)
})
});
Обратите внимание, что пакетная запись может содержать до 500 операций. Поэтому, если ваша коллекция содержит более 500 документов, вы можете вместо этого использовать Promise.all()
.
В качестве дополнительного примечания стоит отметить наличие литералов шаблона .
Литералы шаблона заключаются в символ обратной черты (серьезный акцент) вместо двойных или одинарных кавычек ... и могут содержать заполнители.