我在Firestore函数和数据库中是新手,所以有点卡住了。我有这份文件:
如您所见,现在在一个空数组中回答,但我将有一堆字符串。
问题是我正在使用的Cloud Function失败。这是我的功能
exports.registerUserResponse = functions.https.onRequest((request, response) => {
const original = request.body;
const type_form_id = original.form_response.form_id
var userRef = admin.firestore().collection('users').doc(user_email);
var transaction = admin.firestore().runTransaction(t => {
return t.get(userRef)
.then(doc => {
console.log(doc.data());
var newAnswer = doc.data().answers.arrayUnion(type_form_id);
t.update(userRef, {answers: newAnswer});
});
}).then(result => {
//return response.status(200).send();
return response.status(200).json({result: `Message added.`}).send();
}).catch(err => {
console.log(err);
return response.status(500).json({result: `Message: ${err} error.`}).end();
});
所有值都可以,但是我在arrayUnion函数上遇到此错误
TypeError: Cannot read property 'arrayUnion' of undefined
at t.get.then.doc (/user_code/index.js:27:58)
at process._tickDomainCallback (internal/process/next_tick.js:135:7)
因此,我不知道该如何使用该功能。感谢您的任何答案!
答案 0 :(得分:1)
arrayUnion不是可从Firestore查询取回的任何数据项上存在的方法。在doc.data().answers
中获得的undefined值绝对不可用。
您似乎对如何使用FieldValue.arrayUnion()感到困惑。您不需要交易就可以使用它。只需按照documentation中所述执行更新:
var washingtonRef = db.collection('cities').doc('DC');
// Atomically add a new region to the "regions" array field.
var arrUnion = washingtonRef.update({
regions: admin.firestore.FieldValue.arrayUnion('greater_virginia')
});
您可能看起来像这样:
admin.firestore().collection('users').doc(user_email).update({
answers: admin.firestore.FieldValue.arrayUnion(type_form_id)
}).then(...);