避免Firebase中的重复条目

时间:2017-10-25 14:54:32

标签: ios swift firebase firebase-realtime-database

我目前正在启动并运行一项功能,在添加到表格视图时会将新的GoalItem插入我的Firebase数据库..这太棒了!

func save(_ goalItems: [GoalItem]) {
    let ref = Database.database().reference()
    let goalRef = ref.child("goals").childByAutoId()

    for goalItem in goalItems {
        let attributes = ["iconName": goalItem.iconName, "text": goalItem.text, "user": self.email]
        goalRef.setValue(attributes)
    }

}

但是,当用户正在编辑他们的' GoalItem'时,也会调用save,导致该项目被复制。

基本上,当text的{​​{1}}属性最初等于数据库'文本&时,我正在寻找避免重复条目的方法#39;参考,这是'目标的孩子。参考。

我猜是这样的:

GoalItem

访问数据库'文本'抓住并将值与if goalItem.text == (value of Firebase's text reference) { (update the text reference) else { goalRef.setValue 进行比较的参考是我此刻正在下降的地方。数据库的结构非常简单 - 如下图所示。

数据库

enter image description here

TLDR;需要访问特定的数据库子引用和更新(而不是覆盖)

提前谢谢!

1 个答案:

答案 0 :(得分:2)

请注意保存功能中的这一行:

Aborting installation.
Unexpected error. Please report it as a bug:
{ Error: Cannot find module 'C:\Users\leonel\Desktop\pseudogram\node_modules\react-scripts\package.json'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at checkNodeVersion (C:\Users\leonel\AppData\Roaming\npm\node_modules\create-react-app\createReactApp.js:476:23)
    at getPackageName.then.then.then.packageName (C:\Users\leonel\AppData\Roaming\npm\node_modules\create-react-app\createReactApp.js:283:7)
    at process._tickCallback (internal/process/next_tick.js:109:7) code: 'MODULE_NOT_FOUND' }

let goalRef = ref.child("goals").childByAutoId() 是生成托管目标对象的长串随机字符的原因。由于您在更新时调用它,因此它也会创建新的目标对象。

因此,您需要做的是为每个现有目标保留此自动ID。而且,如果您正在编辑特定目标对象,则此参考应为:

childByAutoId()