Cloud Firestore не запускает onWrite в шаблоне - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь написать функцию агрегирования, чтобы обновить несколько деталей об изменении значения вложенного объекта документа в подстановочном знаке.

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 ]

0 голосов
/ 12 октября 2019

Из вашего комментария выше видно, что вы хотите написать (обновить) документ из коллекции classrooms. Точнее, обновите поле access, которое имеет тип Map (см. doc для типов 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. Каждый раз, когда вы хотите сохранить доступ, вы пишете новый документ в одну из этих коллекций.

Затем вы можете запросить вложенные коллекции, чтобы найти документы, к которым у данного идентификатора есть права на чтение или запись. Затем из QueryDocumentSnapshot, возвращаемого этими запросами, вы можете найти родительский документ (через свойство ref).

Однако это означает, что у вас будет дополнительное чтение для получения сведений о классе из результатовзапросы к коллекциям writeAccess и readAccess.

0 голосов
/ 12 октября 2019

Операция обновления не вызовет облачную функцию. Так как вы написали функцию триггера для поднабора с именем access, и вы делаете обновление для корневой коллекции под названием classroom. Так что выше написанная функция триггера будет запускаться только для подколлекциивызываемый доступ не для корневой коллекции с именем classroom. Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...