typescript - Är det möjligt att komma åt FieldValue med Node.js cloud-funktioner?


Jag försöker ta bort en användare från en karta som jag deklarerade i FireStore. Men hur hämtar jag fältvärdet? Jag tror att det borde vara något som firestore.FieldValue.arrayRemove(user.uid), bara att firestore inte har objektet FieldValue. Hur kan jag ta bort användaren från användarkartan?

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

const firestore = admin.firestore();

export const onUserDeleted = functions.region('europe-west1').auth.user().onDelete(async user => {
    const groups = await firestore.collection('groups').where('users', 'array-contains', user.uid).get();
    const promises : Promise<FirebaseFirestore.WriteResult>[] = [];
    groups.forEach(snapshot => {
        promises.push(snapshot.ref.update({
            'users' : ,
        }));
    }); 
    return await Promise.all(promises);
});

Svar #1

När du använder Firebase Admin SDK, och använder importen som visas i din kod, refererar du till FieldValue med admin.firestore.FieldValue.

Svar #2

Observera: Jag har provat ovanstående lösning och det fungerade inte.

Jag har letat efter detta i ungefär en hel dag och hittade lösningen från ett av Firebase NodeJS-snippets-arkiven. Jag vet att det inte är i TypeScript så ändra bara importen därefter.

// for the import part
const {getFirestore, FieldValue} = require("firebase-admin/firestore");
// also, getFirestore is another import I needed and you might not so change accordingly

// for the update
await admin
 .firestore()
 .collection("Posts").doc(docId).update({
   postImages: FieldValue.arrayUnion(signedUrl),
 }).then((_) => {
    functions.logger.log("Updated the image link successfully");
 });

Relaterade artiklar