测试 Firebase 中是否存在数据

IT技术 javascript firebase
2021-02-05 11:06:36

我想在添加数据之前测试 Firebase 中是否存在数据。但是我的方法有问题:我尝试使用以下 Javascript 代码列出所有数据:

var theDataToAdd = userName;
var usersRef = new Firebase('https://SampleChat.firebaseIO-demo.com/users/');
usersRef.on('child_added', function(snapshot) {
   var message = snapshot.val();
   if (message.name == theDataToAdd)
      alert ("exist");
});

但是如果用户不存在,之前会添加,然后我的代码说他存在​​。你会说这是正常的,因为我的警报只有在“child_ added”时才会被调用,但我不知道怎么做。

我也尝试过“value”事件,但我的“message.name”是空的。

我该如何解决?

3个回答

您可以使用DataSnapshot.hasChild来确定某个孩子是否存在。

usersRef.once('value', function(snapshot) {
  if (snapshot.hasChild(theDataToAdd)) {
    alert('exists');
  }
});

这是一个快速的 jsfiddle,展示了它是如何工作的:http : //jsfiddle.net/PZ567/

但这将下载所有数据usersRef并在客户端上执行检查。通过加载更有针对性的参考,仅下载您要检查的用户的数据会更有效率:

usersRef.child(theDataToAdd).once('value', function(snapshot) {
  if (snapshot.exists()) {
    alert('exists');
  }
});
错误消息明确指出您不能.在名称/路径中包含 a 最简单的方法是简单地从您的名字中禁止此类字符。如果您不能禁止它们,您应该对它们进行编码(例如.to %20)或简单地从您发送到 Firebase 的名称中删除它们。
2021-03-31 11:06:36
好的,最大。如果您对映射有疑问,只需为它打开一个新问题。我们最近看到一些人遇到了名称/路径字符的限制,因此可以就该主题提出一个很好的问题。
2021-04-02 11:06:36
如果数据不存在于一个 firebase 调用中,是否可以存储数据?
2021-04-03 11:06:36
谢谢,它有效!但是,现在,我遇到了另一个问题:Firebase.DataSnapshot.hasChild 失败:第一个参数是无效路径:“jean.paul”。路径必须是非空字符串并且不能包含“.”、“#”、“$”、“[”或“]” 所以,在这种情况下,是否可以放一个“.” 在带有演员表的路径中,另一种方法还是没有?
2021-04-07 11:06:36
这个解决方案很慢。请看我下面的帖子。
2021-04-10 11:06:36

我使用以下代码:

var theDataToAdd = userName;
var ref = new Firebase('https://SampleChat.firebaseIO-demo.com/users/' + theDataToAdd);
ref.on('value', function(snapshot) {
   if (snapshot.exists())
      alert ("exist");
   else
      alert ("not exist");
});

我的方法比这更轻量级:

usersRef.once('value', function(snapshot) {
  if (snapshot.hasChild(theDataToAdd)) {
    alert('exists');
  }
});

因为客户端不会获取所有用户数据,这可能是巨大的。

@SergioGeeK7 不
2021-03-22 11:06:36
请注意,客户端仍会获取位于提供的 url ' SampleChat.firebaseIO-demo.com/users ' + theDataToAdd 下的数据,并将其作为 DataSnapshot 的一部分返回。我还没有找到一种方法来检查存在而不获取 url 的数据快照
2021-04-06 11:06:36
在第一段代码中下载所有用户数据以检查它是否存在,即使您在 var ref = new Firebase(' SampleChat.firebaseIO-demo.com/users ' + theDataToAdd);上指定了对节点的引用?
2021-04-09 11:06:36
是的,但它只为一个用户获取数据,而不是 Frank van Puffelen 提出的所有用户。我也不知道根本没有获取的解决方案。
2021-04-11 11:06:36

检查 ANDROID 的 Firebase 数据库中是否存在数据的方法。

 final Firebase firebaseRef = new Firebase(<Your_Firebase_URL>/Users).child(username);


firebaseRef.addListenerForSingleValueEvent(new ValueEventListener) {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    if (dataSnapshot.exists()) {
        // User Exists
    }
}

@Override
public void onCancelled(FirebaseError firebaseError) {

}
});