Firestore - 删除对象内的字段

Gio*_*Gio 13 firebase google-cloud-firestore

我正在使用Firestore,我想删除特定对象中的字段.我可以删除文档中的字段,这要归功于:

fieldName: firebase.firestore.FieldValue.delete()
Run Code Online (Sandbox Code Playgroud)

但如果我有一个像这样的对象:

songList {
songName1: "HelloWorld",
songName2: "AnotherSong",
songName3: "andTheLastOne"
}
Run Code Online (Sandbox Code Playgroud)

为了删除字段songName3,我将无法执行以下操作:

songList.songName3: firebase.firestore.FieldValue.delete()
Run Code Online (Sandbox Code Playgroud)

有没有办法删除对象内的字段?或者我应该删除整个对象,在没有第3个字段的情况下重建它并保存它?

提前致谢,

Cri*_*ano 20

带有特殊"FieldValue.delete()"的"点符号"应该有效.

试试这个:

    Map<String, Object> deleteSong = new HashMap<>();
    deleteSong.put("songList.songName3", FieldValue.delete());

    FirebaseFirestore.getInstance()
        .collection("yourCollection")
        .document("yourDocument")
        .update(deleteSong);
Run Code Online (Sandbox Code Playgroud)

它对我有用.

请参阅:https ://firebase.google.com/docs/firestore/manage-data/delete-data https://firebase.google.com/docs/firestore/manage-data/add-data


小智 20

这对我来说一般

firebase
  .firestore()
  .collection('collection-name')
  .doc('doc-id')
  .set({ songlist : {
    [songName]: firebase.firestore.FieldValue.delete()
  }
  }, { merge: true });
Run Code Online (Sandbox Code Playgroud)


Pau*_*aul 8

今天找到了这个话题,想添加我的解决方案。我正在使用点符号。以下将通过使用从歌曲列表中删除特定歌曲firestore.FieldValue.delete();。我正在使用用 TypeScript 编写的 Node.js firebase-admin 包:

import * as admin from 'firebase-admin';
export async function removeSong(trackId: string, song: string) {
    try {
        const updates = {};
        // Dot Notation - will delete the specific song from songList
        updates[`songList.${song}`] = admin.firestore.FieldValue.delete();
        // Not necessary, but it's always a good practice
        updates['updatedAt'] = admin.firestore.FieldValue.serverTimestamp();

        await firestore.collection('songs').doc(trackId).update(updates);
        return true
    } catch (error) {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)