Swift 如何在不重写的情况下将数据写入Firebase

Swift 如何在不重写的情况下将数据写入Firebase,swift,firebase,Swift,Firebase,Firebase SDK中无法仅在数据已经存在时添加数据,updateChildValues更新以前的值或插入新值。要检查数据是否已经存在,您首先需要获取以前的数据,然后您可以检查并做出决定。像 let value = categoriessegment.titleForSegment(at: categoriessegment.selectedSegmentIndex) let data = ["price":pricetextfield.text,"Discount":Discounttex

Firebase SDK中无法仅在数据已经存在时添加数据,
updateChildValues
更新以前的值或插入新值。要检查数据是否已经存在,您首先需要获取以前的数据,然后您可以检查并做出决定。像

let value = categoriessegment.titleForSegment(at: categoriessegment.selectedSegmentIndex)
let data = ["price":pricetextfield.text,"Discount":Discounttextfield.text,"Category":value,"Description":descriptiontextfield.text];
// ref.child(currentdate).setValue(data)
ref.child(currentdate).updateChildValues(data as [AnyHashable : Any])
我们有另一个选项,允许/不允许通过Firebase规则覆盖数据,如

   Database.database().reference().observeSingleEvent(of: DataEventType.value, with: { (snapshot) -> Void in
            if (snapshot.value != nil) {
                 // it means data already present
             } 
        })

你的意思是如果数据已经存在,那么不要插入,否则就插入?如果数据已经存在,我想添加数据。例如,我需要两次添加日期为2019年6月13日的数据。问题有点不清楚,因为Firebase中没有所谓的覆盖,注释也很模糊。您能否澄清并提供您的用例示例?我需要为单个节点添加多个条目,例如日期14-06-2019第一条条目-abc第二条条目-xyz第三条条目-类似pqr。这是为了重申你的问题;您有一个带有日期键的节点,并且希望在该节点下添加多个子节点。如果这是个问题,那么你在这项任务中遇到了什么困难?你能更清楚地解释一下你想做什么吗?甚至可以向我们展示一个Firebase结构的示例(请以文本形式,不要图片)。@Pravin这个答案有一些好的信息,但不是100%准确。使用,您可以根据其他数据是否已存在,拒绝或允许将数据写入节点。例如,如果密钥为“13-06-2019”的节点不存在,则可以将规则设置为拒绝写入。我不确定这是否是最好的解决方案,因为用例不清楚,但答案是可以的,如果其他数据存在/不存在,您可以阻止/允许写入数据。同意,我只考虑了firebase sdk,我将更新我的答案,并将添加一个与firebase规则相关的示例。
{
  "rules": {    
    "your_node": {
        ".write": "data.exists()"   /// or ".write": "!data.exists()"  if you want to restrict overwrite
    }
  }
}