С облачными функциями Firebase я не могу удалить поле с карты так же, как я его добавил. Почему?

Добавить функцию:

exports.newCampaign = functions.https.onCall((data, context) => {
    // get adventurer information
    const campaignName = data.campaignName;
    const timestamp = data.timestamp;

    const uid = context.auth.token.uid || null;

    // create a new document for the campaign
    var query = admin.firestore().collection(`Adventurers/${uid}/campaigns`).add({
        locations: [],
        name: campaignName
    })
    .then((docRef) => {
        admin.firestore().collection('Adventurers').doc(uid).update({
            [`campaignList.${docRef.id}`]: {
                id: docRef.id,
                name: campaignName,
                timestamp: timestamp
            }
        });

        return {
            id: docRef.id
        };
    })
    .catch((error) => {
        return {
            error: "Error adding document: " + error
        };
    });

    return query;
});

Когда я вызываю это, коллекция Adventurers.uid.campaigns получает новый документ с идентификатором кампании, а Adventurers.uid.campaignList получает атрибут, называемый идентификатором кампании. Работает как положено

Удалить функцию:

exports.deleteCampaign = functions.https.onCall((data, context) => {
    // get adventurer information
    const campaignId = data.campaignId;
    const uid = context.auth.token.uid || null;

    // delete the document for the campaign
    var query = admin.firestore().collection(`Adventurers/${uid}/campaigns`).doc(campaignId).delete()
    .then((docRef) => {
        // delete campaign  from the campaign list
        admin.firestore().collection('Adventurers').doc(uid).update({
            [`campaignList.${campaignId}`]: Firebase.firestore.FieldValue.delete()
        });

        return {};
    })
    .catch((error) => {
        return {
            error: "Error removing document: " + error
        };
    });

    return query;
});

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


person Emma    schedule 28.02.2020    source источник


Ответы (1)


Аналогичный пост здесь

Поскольку я работаю в облачной функции, мне нужно вызвать admin.firestore.FieldValue.delete() вместо Firebase.firestore.FieldValue.delete() в моей функции удаления.

person Emma    schedule 29.02.2020