【问题标题】:firebase database check data if exist before insert when using unique ID [duplicate]使用唯一ID时,firebase数据库检查数据是否在插入之前存在[重复]
【发布时间】:2019-02-20 15:57:44
【问题描述】:

如何在使用唯一 ID 插入数据之前搜索/检查 firebase 实时数据库中的数据,例如此处的屏幕截图: myfirebase data

(截图如下)

+用户

--LMXmJKkb8khQa08zRtD

-----姓名:“约翰”

-----状态:1

--LMXmRscUZPvp00oVv5s

-----姓名:“彼得”

-----状态:1

注意:该应用不知道或拥有唯一 ID 的副本,因此我无法直接访问它。

我想在将“名称”添加/插入到数据库之前检查它是否唯一。

这是我到目前为止所做的代码(注意这是 C++,你可以用任何语言发布你的答案)

firebase::database::DatabaseReference userRef = database->GetReference();   
SampleValueListener* listner = new SampleValueListener();
userRef.Child("users").OrderByChild("name").EqualTo("John").AddValueListener(listner);

class SampleValueListener : public firebase::database::ValueListener {
 public:
     void OnValueChanged(
          const firebase::database::DataSnapshot& snapshot) override {
         if (snapshot.exists()) {
            printf("\nData exist");
         }
      }

    void OnCancelled(const firebase::database::Error& error_code,
    const char* error_message) override {
    printf("ERROR: SampleValueListener canceled: %d: %s", error_code,
        error_message);
   }
};

到目前为止,我遇到了一个错误:

错误:SampleValueListener 已取消:10:索引未定义,将“.indexOn”:“name”,用于路径“/users”添加到规则中

所以我需要以下帮助:

  1. 那么当我无法直接访问时如何设置索引如何访问唯一标识符下的名称?

  2. 我做对了吗? (来自上面的代码),如何在添加值之前检查“名称”是否存在?

【问题讨论】:

标签: firebase firebase-realtime-database


【解决方案1】:

将以下内容添加到您的 Firebase 规则是否可以解决问题?

"rules": {
    "users": {
        ".indexOn": "name"
     }
 }

【讨论】:

  • 索引需要在/users上定义,所以你不应该在这些规则中有$dynamicid
  • 哎呀。猜猜错误消息甚至说。谢谢你的澄清!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多