Cloud Firestore 不会在通配符中触发 onWrite

我正在尝试编写一个聚合函数来更新有关通配符中文档的嵌套对象的值更改的一些详细信息。


exports.createAccessDetails = functions.firestore.document('classrooms/{classId}/access/{accessType}').onWrite((snap, context) => {

  // const data = snap.data();

  const { classId, accessType } = context.params;

  console.log(snap);

  console.log(classId, accessType);

  return null;

});

然后像单击按钮一样更新对象


function setAccess() {

  const date = Date.now();

  Firebase.firestore.collection('classrooms')

    .doc('1570776211111').update({

      [`access.writeAccess.${date}`]: true

    });

}

我究竟做错了什么?为什么函数没有触发?


喵喔喔
浏览 136回答 2
2回答

繁华开满天机

从您上面的评论来看,您似乎想编写(更新)该classrooms集合的文档。更准确地说,更新accessMap 类型的字段(有关 Firestore 类型,请参阅文档)。因此,当您更新此文档并获取access您将调用的地图的值时,您的云函数将被简单地触发snap.data().access。exports.createAccessDetails = functions.firestore.document('classrooms/{classId}').onWrite((snap, context) => {  const data = snap.data();  const accessMap = snap.data().access;  const writeAccessMap = accessMap.writeAccess  //........  return null;});更新以下您的评论:我没有全面了解您的确切业务需求(特别是我看到您提到了 writeAccess 和 readAccess),但您可能有以下方法:对于每个classroom文档,您创建两个子集合:writeAccess和readAccess. 每次您想要保存访问权限时,您都会在这些集合之一中编写一个新文档。然后,您可以查询子集合以查找给定 ID 具有读或写访问权限的文档。然后从这些查询返回的 QueryDocumentSnapshot 中,您可以找到父文档(通过ref属性)。然而,这意味着你将有一个额外读来从查询到的结果课堂细节writeAccess和readAccess收藏。

炎炎设计

更新操作不会触发云函数。因为您为名为 access 的子集合编写了触发器函数,并且您正在对名为classroom 的根集合进行更新。所以上面编写的触发器函数只会为名为 access 的子集合触发,而不是对于名为classroom的根集合。希望这对您有所帮助
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript