gpt4 book ai didi

ios - 试图找出从Firestore字典中删除元素的更好方法

转载 作者:行者123 更新时间:2023-12-01 19:38:26 26 4
gpt4 key购买 nike

我在应用程序中使用Firestore,并且有一个名为“votes”的 map 字段用于用户的上投票或下投票。看起来像这样:

enter image description here

我想添加一个选项从那里删除一个元素,这就是我现在得到的:

 //getting the user's votes dictionary and removing the post from it.
userRef.getDocument { (doc, error) in
if let _ = error { completion(false) }
guard let dict = doc?.data()?[USER_VOTES] as? [String: Any] else { return }
currentDict = dict
currentDict.removeValue(forKey: id)
}

//setting the votes dictionary with the updated one.
userRef.setData(currentDict) { (error) in
if let _ = error { completion(false) }
else { completion(true) }
}

对我来说,它看起来并不是很有效,因为每次用户尝试从此字典中删除元素时,我都必须写入数据库。这会减慢该过程的速度,据我所知,Firestore的免费层限制了写入次数。
有没有更好的方法,也许可以直接从用户文档中删除它?我试图寻找答案,但找不到对我有用的任何东西。
例如: Removing a dictionary element in Firebase看起来像我需要做的,但是我无法使其工作。

编辑:
我试图这样删除它
    userRef.updateData([
USER_VOTES:[
id: FieldValue.delete()
]
]) { (error) in
if let _ = error { completion(false) }
}

该应用程序崩溃表示:
Terminating app due to uncaught exception 'FIRInvalidArgumentException', reason: 'FieldValue.delete() can only appear at the top level of your update data 

最佳答案

为了能够删除特定字段,您应该遵循here提到的步骤。

对于您的情况,我在“投票”集合下创建了以下内容:
enter image description here

因此,要删除vote2字段,您应该使用:

// Get the `FieldValue` object
let FieldValue = require('firebase-admin').firestore.FieldValue;

// Create a document reference
let fieldRef = db.collection('voting').doc('votes');

// Remove the 'vote2' field from the document 'votes'
let removeField = fieldRef.update({
vote2: FieldValue.delete()
});

这是运行上述命令后的文档:
enter image description here

编辑:

例如,如果数据模型是文档中的 映射,则:
enter image description here

然后,这里是如何删除文档内部数组中的字段的方法:
let docRef = db.collection('voting').doc('user1');

let removeField = docRef.set({'votes':
{['id_vote_1'] : FieldValue.delete()}}, {merge: true});

这是运行上述命令后的文档:

enter image description here

关于ios - 试图找出从Firestore字典中删除元素的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59058342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com