Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase Firestore-删除对象内的字段_Firebase_Google Cloud Firestore - Fatal编程技术网

Firebase Firestore-删除对象内的字段

Firebase Firestore-删除对象内的字段,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我正在使用Firestore,我想删除特定对象中的字段。 由于以下原因,我可以删除文档中的字段: fieldName: firebase.firestore.FieldValue.delete() 但如果我有这样一个对象: songList { songName1: "HelloWorld", songName2: "AnotherSong", songName3: "andTheLastOne" } 为了删除字段songName3,我将无法执行以下操作: songList.songName

我正在使用Firestore,我想删除特定对象中的字段。 由于以下原因,我可以删除文档中的字段:

fieldName: firebase.firestore.FieldValue.delete()
但如果我有这样一个对象:

songList {
songName1: "HelloWorld",
songName2: "AnotherSong",
songName3: "andTheLastOne"
}
为了删除字段songName3,我将无法执行以下操作:

songList.songName3: firebase.firestore.FieldValue.delete()
有没有办法删除对象中的字段?或者我应该删除整个对象,在没有第三个字段的情况下重建它并保存它吗

提前感谢,

带有特殊“FieldValue.delete()”的“点符号”应该可以工作

试试这个:

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

    FirebaseFirestore.getInstance()
        .collection("yourCollection")
        .document("yourDocument")
        .update(deleteSong);
Map deleteSong=newhashmap();
deleteSong.put(“songList.songName3”,FieldValue.delete());
FirebaseFirestore.getInstance()
.收藏(“你的收藏”)
.文件(“您的文件”)
.更新(删除歌曲);
这对我有用

见:

今天找到了此主题,希望添加我的解决方案。我用的是点符号。下面将使用
firestore.FieldValue.delete()从歌曲列表中删除特定歌曲。我使用的是用TypeScript编写的Node.js firebase管理包:

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

警告:这不适用于贴图,仅适用于阵列

您可以将
歌曲列表
实现为一个数组,而不是一个映射。因为对于阵列,Firestore现在有一个专用功能,可以从阵列中删除元素:

yourRef.update({
    songList: firebase.firestore.FieldValue.arrayRemove("SongName3")
});

来源:

我在使用Kotlin的Android上遇到了同样的问题,我也用点符号解决了这个问题。对于Android Kotlin用户,即:

 val songName: String = "songName3"
 val updatesMap = HashMap<String, Any>()
 updatesMap["songList.${songName}"] = FieldValue.delete()
 FirebaseFirestore.getInstance()
                  .collection("Your Collection")
                  .document("Your Document")
                  .update(updatesMap)
val-songName:String=“songName3”
val updatemap=HashMap()
UpdateMap[“songList.${songName}”]=FieldValue.delete()
FirebaseFirestore.getInstance()
.收藏(“您的收藏”)
.文件(“您的文件”)
.update(updatemap)

希望这有帮助

总的来说,这对我来说很有用

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

处理贴图/对象的更简单方法

db.collection('Users').doc('key')
        .update({
            'products.keytext' : firebase.firestore.FieldValue.delete()
        })
        .then(() => {
            console.log('Success');
        })
        .catch((e) => {
            console.log('Error---->', e);
        });

这将从products map中删除带有键的对象。

上面不允许我评论,但Manuel Borja的解决方案是有效的,非常干净。下面是我如何使用它的:

db.collection("coolcollection")
  .doc(id)
  .set(
    {
      users: {
        [firebase.auth().currentUser
          .email]: firebase.firestore.FieldValue.delete(),
      },
    },
    { merge: true }
  );

需要添加的几件事:当映射的给定字段存在或不存在时,这种方法都有效。

使用
map
更新文档,其中包含一个要删除的键和value
FieldValue.delete()

var collection=FirebaseFirestore.instance.collection('collection');
收集
.doc(“文档id”)
.更新(
{
“songList.songName3”:FieldValue.delete(),
}
);

这对我很有效:使用您的解决方案,我能够删除对象中的嵌套字段。但是,我使用了firebase.firestore而不是admin.firestore。它似乎也在起作用。