Google firebase 检查孩子是否存在

新手上路,请多包涵

在我的应用程序中,我需要检查我在 firebase 上的数据库的给定元素是否有一个给定名称的孩子。我希望可以通过使用以下内容来完成:

 DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

if (rootRef.childExists("name")) {
    //run some code
}

我搜索了但找不到任何有用的东西。

原文由 zomnombom 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 634
2 个回答

编辑 2; worth put on top: 我认为值得一提的是,这实际上是下载这个快照的所有数据,只是为了检查是否存在任何数据。你应该注意这里。如果引用很大(例如, 实际上 是根引用而不是特定的子项/属性),那么您应该找到一个更深的节点来检查是否存在,或者以不同的方式设计您的数据结构,以便进行有效的检查。

数据库引用实际上是该数据的 URL。您想实际 获取 数据以查看孩子是否存在。这就是为什么您似乎正在寻找的方法在 DataSnapshot 上。

 DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  void onDataChange(DataSnapshot snapshot) {
    if (snapshot.hasChild("name")) {
      // run some code
    }
  }
});

现在,这个设计模式感觉有点奇怪。您正在读取整个数据库只是为了查看“名称”是否存在。您可以通过收听 rootRef.child("name") 然后检查是否 snapshot.exists() 来提高效率。

如果你想在这里做 _验证_,而不是控制流程,你应该考虑把这段代码放在你的 rules.json 中。

编辑:我最初使用了错误的函数名称(childExists 而不是 hasChild)

原文由 Thomas Bouldin 发布,翻译遵循 CC BY-SA 3.0 许可协议

不要这样做

绝不

它将获取您的所有数据并将其带到设备

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  void onDataChange(DataSnapshot snapshot) {
    if (snapshot.hasChild("name")) {
      // run some code
    }
  }
});

通过这种方式进行检查。如果存在,它将返回子项的值,否则 -> null

 DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.child("childName")
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  void onDataChange(DataSnapshot snapshot) {
    if (snapshot.getValue() == null) {
      // The child doesn't exist
    }
  }
});

原文由 Arsen Nersisyan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题