当我在便笺集中创建一个新文档时,我想更新信息文档中的数量。我在做什么错了?
exports.addNote = functions.region('europe-west1').firestore
.collection('users/{userId}/notes').onCreate((snap,context) => {
const uid = admin.user.uid.toString();
var t;
db.collection('users').doc('{userId}').collection('info').doc('info').get((querySnapshot) => {
querySnapshot.forEach((doc) => {
t = doc.get("countMutable").toString();
});
});
let data = {
countMutable: t+1;
};
db.collection("users").doc(uid).collection("info").doc("info").update({countMutable: data.get("countMutable")});
});
答案 0 :(得分:1)
您...这里发生了很多事情。一些问题:
userId
上下文参数和您从auth对象获得的uid
之间的关系。据我所知,admin.user
实际上不是Admin SDK的一部分。increment
操作,因此冒着多个函数调用同时执行增量操作的风险。 (Learn More Here)简而言之,这一切都意味着您可以更简单地完成此操作。
这应该可以帮助您。我假设您实际上想要的uid
实际上是触发更新的文档上的那个。如果没有,请根据需要进行调整。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
exports.addNote = functions.firestore.document('users/{userId}/notes/{noteId}').onCreate((snap,context) => {
const uid = context.params.userId;
return db.collection("users").doc(uid).collection("info").doc("info").set({
countMutable: admin.firestore.FieldValue.increment(1)
}, { merge: true });
});
如果不想创建info
文档(如果它不存在),而想得到一个错误,可以使用update
而不是set
:
return db.collection("users").doc(uid).collection("info").doc("info").update({
countMutable: admin.firestore.FieldValue.increment(1)
});