2 回答
![?](http://img1.sycdn.imooc.com/533e4d00000171e602000200-100-100.jpg)
TA贡献1816条经验 获得超4个赞
从您上面的评论来看,您似乎想编写(更新)该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收藏。
![?](http://img1.sycdn.imooc.com/54586431000103bb02200220-100-100.jpg)
TA贡献1808条经验 获得超4个赞
更新操作不会触发云函数。因为您为名为 access 的子集合编写了触发器函数,并且您正在对名为classroom 的根集合进行更新。所以上面编写的触发器函数只会为名为 access 的子集合触发,而不是对于名为classroom的根集合。希望这对您有所帮助
添加回答
举报