亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Cloud Firestore 不會在通配符中觸發 onWrite

Cloud Firestore 不會在通配符中觸發 onWrite

喵喔喔 2021-11-18 15:46:45
我正在嘗試編寫一個聚合函數來更新有關通配符中文檔的嵌套對象的值更改的一些詳細信息。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    });}我究竟做錯了什么?為什么函數沒有觸發?
查看完整描述

2 回答

?
繁華開滿天機

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收藏。


查看完整回答
反對 回復 2021-11-18
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

更新操作不會觸發云函數。因為您為名為 access 的子集合編寫了觸發器函數,并且您正在對名為classroom 的根集合進行更新。所以上面編寫的觸發器函數只會為名為 access 的子集合觸發,而不是對于名為classroom的根集合。希望這對您有所幫助


查看完整回答
反對 回復 2021-11-18
  • 2 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號