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");
});
