我应该总是通过$push()向对象列表中添加新对象吗?



我正在为Firebase和AngularFire创建一个由用户、帖子和评论组成的数据结构。在我的印象中,用户的key/id应该是用户名,评论和帖子的key/id应该是自动生成的firebase key。

我一直在通过angularfire文档工作,并对使用$push()方法时添加到对象的自动生成密钥(name())感到困惑。

查看firebase网站上的一些示例,我看到Users对象的示例没有自动生成密钥—单个用户的密钥是用户名—但同时,每当您通过$push向数组添加对象时,都会添加密钥

我的问题是:

1)我应该一直使用firebase自动生成的密钥吗?如果没有,那么我如何添加一个新用户,因为$push()会自动创建密钥,而$set()会重置我的所有用户?

2) $idname()之间的关系是什么?

示例数据

从https://www.firebase.com/docs/web/guide/saving-data.html

文档显示了以下Users对象:

{
  "users": {
    "alanisawesome": {
      "date_of_birth": "June 23, 1912",
      "full_name": "Alan Turing"
    },
    "gracehop": { 
      "date_of_birth": "December 9, 1906",
      "full_name": "Grace Hopper"
    }
  }
}

我如何添加更多的用户没有重置我的当前用户与$set()或添加angularfire id与push() ?

然后是post对象,生成id:

{
  "posts": {
    "-JRHTHaIs-jNPLXOQivY": {
      "author": "gracehop",
      "title": "Announcing COBOL, a New Programming Language"
    },
    "-JRHTHaKuITFIhnj02kE": {
      "author": "alanisawesome",
      "title": "The Turing Machine"
    }
  }
}

简短的回答是:您可能不想使用push来存储您的用户。

如果您从其他来源获得密钥,例如来自Simple Login的uid,那么您几乎肯定希望使用uid来组织您的用户及其在firebase中的数据。

这是因为,你的用户正在进行的会话总是为你提供相同的uid,你可以用它来查找他们的用户数据和他们的东西。

在这种情况下,如果您基于已知的用户id进行设置,则可以安全地使用set而无需重置所有用户。

但是我认为你得到的是,所以一般来说,什么时候设置vs push?

一个典型的博客在Firebase中可能看起来像这样:

{ 
  'users' : {
    // uid from Simple Login, that you used with set()
    'google-1234' : {  
        'displayName' : 'Jane Smith',
        ...
    } 
    , ...
  },
  'posts' : {
    // a blog post ID you pick and use for set()
    'blog-post-id-i-use-in-the-url' : { 
      'title' : 'Blog Post Title',
      'contents' : 'Four score and seven...'
     }, ...
   }
  'postComments' {
    'blog-post-id-i-use-in-the-url' : { 
      // Firebase generated ID done with push()
      '_fe31ca1' : { 
        // uid from simple login (assuming comments require auth)
        'commenterUserId': 'google-5678', 
        'commentBody': 'cats back for everyone!'
      } ... other comments ...
    }
  }
}

在这个例子中,我们在插入新用户和帖子时使用set,因为我们从另一个来源获得了一个好的唯一ID。这些ID很好,因为它们允许我们稍后根据该ID轻松地回忆内容。

我们使用push作为注释。我们没有其他来源的好的ID,而顺序很重要,所以我们让Firebase为我们生成一个密钥。这是可行的,因为大多数时候我们处理的是与条目相关的注释,所以我们可以根据需要抓取它们。

根据mimming所说的,我找到了解决这个问题的方法。

让您的add user函数以id作为参数。这将是authData。要保存的用户的Uid。

然后将该id附加到firebase链接以使用set创建新用户。使用set添加的任何其他用户都不会擦除它,因为它是用户下数据库的整个新分支。没有firebase唯一id。

$scope.addUSer = function(id){
//pass the id in, andd append it to the end of your url link
var usersRef = new Firebase("https//<your fire base>.firebaseio.com/Users/"+id);
usersRef.set($scope.newUserData);

};

相关内容

  • 没有找到相关文章

最新更新