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