我正在构建一个简单的AngularJS应用程序,使用Firebase在1件事物下存储2个不同的东西。比如var red = 'red';
var yellow = 'yellow';
function flower(color) {
this.color = color;
}
var firstFlower = new flower(red);
var secondFlower = new flower(yellow);
var flowers = [firstFlower, secondFlower];
flowers.forEach(function (flower, index) {
var displayIndex = index +1;
switch (flower.color) {
case red:
console.log("flower number " + displayIndex + " is a tulip");
break;
case yellow:
console.log("flower number " + displayIndex + " is a sunflower");
break;
}
});
下的male
和female
个学生群组。
这是我当前的Firebase数据结构:
这是我的添加功能代码:
students
由于我是NoSQL的新手,我发现这个数据结构看起来很奇怪。
我的问题:
我做得对吗?
图片中的$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);
}
和0
是否正常?
如果有更好的方法,如何改进我的代码,以便Firebase可以为我构建更好的数据结构?
以下结构可能吗?
注意:我希望每个数据集都有唯一的ID。换句话说,学生中的每个学生都有唯一的ID。我知道通过查看这个1
示例没有意义。遗憾。
答案 0 :(得分: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作为节点'名称'。
答案 1 :(得分: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
});