Node.js 在firebase firestore集合中创建新文档时,如何更新另一文档中的数量?

Node.js 在firebase firestore集合中创建新文档时,如何更新另一文档中的数量?,node.js,firebase,google-cloud-firestore,google-cloud-functions,Node.js,Firebase,Google Cloud Firestore,Google Cloud Functions,在便笺集合中创建新文档时,我希望更新信息文档中的数量。我做错了什么 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('{

在便笺集合中创建新文档时,我希望更新信息文档中的数量。我做错了什么

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")});
});

你有。。。这里发生了很多事情。有几个问题:

  • 不能在集合上触发firestore函数,必须提供文档
  • 目前尚不清楚您在如何对待用户id方面是否保持一致
  • 你没有(你需要把它们链接起来,如果你想让它们正确执行,就把它们从函数中返回)
  • 我不清楚
    userId
    上下文参数与从auth对象获得的
    uid
    之间的关系。据我所知,
    admin.user
    实际上并不是系统的一部分
  • 由于您没有使用事务或
    increment
    操作,因此多个函数调用同时执行增量操作可能会产生不一致的结果。()
  • 如果文档不存在,则不会创建该文档。也许这样可以
简而言之,这一切都意味着你可以做得更简单

不过这应该对你有好处。我假设您实际需要的
uid
实际上就是触发更新的文档上的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((快照,上下文)=>{
const uid=context.params.userId;
返回db.collection(“用户”).doc(uid).collection(“信息”).doc(“信息”).set({
可计数:admin.firestore.FieldValue.increment(1)
},{merge:true});
});
如果您不想在
信息
文档不存在的情况下创建该文档,而是想得到一个错误,则可以使用
更新
而不是
设置

返回db.collection(“用户”).doc(uid).collection(“信息”).doc(“信息”).update({
可计数:admin.firestore.FieldValue.increment(1)
});

您已经。。。这里发生了很多事情。有几个问题:

  • 不能在集合上触发firestore函数,必须提供文档
  • 目前尚不清楚您在如何对待用户id方面是否保持一致
  • 你没有(你需要把它们链接起来,如果你想让它们正确执行,就把它们从函数中返回)
  • 我不清楚
    userId
    上下文参数与从auth对象获得的
    uid
    之间的关系。据我所知,
    admin.user
    实际上并不是系统的一部分
  • 由于您没有使用事务或
    increment
    操作,因此多个函数调用同时执行增量操作可能会产生不一致的结果。()
  • 如果文档不存在,则不会创建该文档。也许这样可以
简而言之,这一切都意味着你可以做得更简单

不过这应该对你有好处。我假设您实际需要的
uid
实际上就是触发更新的文档上的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((快照,上下文)=>{
const uid=context.params.userId;
返回db.collection(“用户”).doc(uid).collection(“信息”).doc(“信息”).set({
可计数:admin.firestore.FieldValue.increment(1)
},{merge:true});
});
如果您不想在
信息
文档不存在的情况下创建该文档,而是想得到一个错误,则可以使用
更新
而不是
设置

返回db.collection(“用户”).doc(uid).collection(“信息”).doc(“信息”).update({
可计数:admin.firestore.FieldValue.increment(1)
});