Firebase Firestore-删除对象内的字段
我正在使用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
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
更新文档,其中包含一个要删除的键和valueFieldValue.delete()
var collection=FirebaseFirestore.instance.collection('collection');
收集
.doc(“文档id”)
.更新(
{
“songList.songName3”:FieldValue.delete(),
}
);
这对我很有效:使用您的解决方案,我能够删除对象中的嵌套字段。但是,我使用了firebase.firestore而不是admin.firestore。它似乎也在起作用。