0

我正在构建一个简单的 AngularJS 应用程序,以使用Firebase在 1 个事物下存储 2 个不同的事物。说,malefemale学生团体下students

这是我当前的 Firebase 数据结构:

在此处输入图像描述

这是我添加函数的代码:

$scope.add = function() {
            console.log('add button clicked!');

            var ref = new Firebase('https://XXX.firebaseio.com/');

            var onComplete = function(error) {
                if (error) {
                    console.log('Failed to add a new record');
                } else {
                    console.log('Successfully add a new record');
                }
            };

            var order = ref.child("students");
            var newPostRef = order.push([{
                "male": [{
                    "name": "Jose Fowler",
                    "age": 20
                }, {
                    "name": "Earl Murray",
                    "age": 21
                }]
            }, {
                "female": [{
                    "name": "Jessica Gomez",
                    "age": 22
                }, {
                    "name": "Leona Franklin",
                    "age": 23
                }]
            }], onComplete);

            var postID = newPostRef.key();
            console.log("Unique ID: " + postID);
        }

由于我是 NoSQL 新手,我发现这种数据结构看起来很奇怪。

我的问题

  1. 我做对了吗?

  2. 0图像中的s和s是否1正常?

  3. 如果有更好的方法,如何改进我的代码以便 Firebase 可以为我构建更好的数据结构?

  4. 下面的结构可能吗?

在此处输入图像描述

注意:我想让每个数据集都有唯一的 ID。换句话说,学生中的每个学生都有唯一的ID。students我知道看这个例子是没有意义的。对不起。

4

2 回答 2

3

另一个需要考虑的结构是

students
  student_0_id:
     name:
     age:
     gender
  student_1_id:
     name:
     age:
     gender:

student_x_id 是 firebase 生成的自动生成的节点 id ( childByAutoId/ push)

这种结构提供了许多优点;最大的特点之一是它是“平坦的”,因此查询很容易。所以你可以说,查询所有 18 到 20 岁的女学生。

此外,由于现在每个学生都有一个唯一的标识参考,因此您可以从另一个节点引用它们。例如,您想跟踪哪些学生在所提供的课程中

Classes
  Algebra
    student_1_id
    student_2_id
  Chemistry
    student_3_id
    student_4_id

不要使用 0 和 1 作为节点“名称”。

于 2015-06-03T15:29:45.970 回答
1

Firebase 存储 JSON 对象。虽然您可以推入 JavaScript 数组,但它将以您看到的格式存储。请注意,如果您将数据读回程序中,它将被转换回数组。

正如 Jay 在他的(很好的)答案中指出的那样,数组不是用于在分布式环境中存储数据的推荐数据结构。随着并发客户端数量的增加,您会发现必须维护所谓的单调递增计数器成为瓶颈。这就是 Firebase 进行push操作的原因。它具有许多与数组索引相同的质量(它总是增加,所以事物是自动排序的),但保证在客户端之间是唯一的。这些推送 ID 的缺点是它们不像常规数组索引那样容易理解。

我会将您的代码更改为:

var order = ref.child("students");
var men = order.child("male");
var women = order.child("female");
men.push({
    "name": "Jose Fowler",
    "age": 20
});
men.push({
    "name": "Earl Murray",
    "age": 21
});
women.push({
    "name": "Jessica Gomez",
    "age": 22
});
women.push({
    "name": "Leona Franklin",
    "age": 23
});
于 2015-06-03T17:23:46.527 回答