使用唯一ID时,firebase数据库检查数据是否在插入之前存在

时间:2018-09-16 15:32:30

标签: firebase firebase-realtime-database

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

(屏幕快照如下)

+个用户

-LMXmJKkb8khQa08zRtD

----- name:“ John”

-----状态: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:索引未定义,将路径“ / users”的“ .indexOn”:“名称”添加到规则中

所以我需要以下帮助:

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

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

1 个答案:

答案 0 :(得分:1)

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

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