我无法理解Firebase数据库的工作方式。 是的,我知道它是我的数据的JSON,我知道在不同对象之间设置一对多和多对多关系的方法。但有没有办法为数据库设置某种“架构”?
了解我的意思的一个示例:如果我使用Firebase SDK创建Android应用程序,我的朋友正在创建iOS应用程序。我把它推到"users": {name: John, city: LA}
。我的朋友犯了一个错误,推了{name: Tom, cety: NY}
。比试图获得汤姆斯城市 - 我会得到什么?空?
有没有办法为保存的数据指定结构。在Firebase控制台中,我只看到添加确切值的方法,而不是指定它的结构方式。如何告诉其他开发人员,或者“我在将来”我的用户应该包含哪些内容,例如“name”,“gender”和“dog_eyes_color”? 希望你了解我。
答案 0 :(得分:5)
要回答您的问题,Firebase是一个无架构数据库。如果将数据推送到节点
users
uid_0
name: John
city: LA
并且您的朋友添加了另一个用户
uid_1
name: Frank
cety: NY
然后,您的用户节点将拥有两个具有不同密钥子项的用户;城市与安全。
正如弗兰克在评论中提到的,你可以“捕获”并阻止数据被写入无效的节点。但是,请考虑这个课程:
class User {
userId = ""
name = ""
city = ""
func saveToFirebase() {
myRef.setValue( user id etc etc)
}
}
您告诉您的朋友,他们想要在Firebase中存储用户,以便使用该类。您现在拥有一个与Firebase交互的标准化模型。该类(或结构或您使用的任何类)定义了要使用的模式。
Firebase数据库(NoSQL)提供了一种存储和检索机制 用表格式关系以外的方式建模的数据 用于关系数据库
作为用户问题的后续跟进:Firebase DOES将“后端”的用户身份验证数据存储到开发人员无法直接访问(可查询)的位置。这里的想法是,当用Firebase功能(如createUser())在Firebase中创建用户时,会在创建用户时为您提供该用户的用户ID(UID),这是您可以用来在/ users中存储其他信息的用户ID你创建的节点。
users
uid_0
name: Frank
location: LA
fav_food: Pizza
uid_1
name: Leroy
location: NY
fav_food: Tacos
.validate .... 我不会利用.validate规则来定义结构(模式)或控制其他开发人员。从长远来看,提供编码工具(如上面提到的Users类)将提供更大的灵活性和更少的恶化(和编码),并且可以更加可维护。
答案 1 :(得分:1)
这种实现方式怎么样
class User {
constructor(name, city) {
this.name = name;
this.city = city;
return {
name: this.name,
city: this.city,
};
}
}
const saveDocument = function (collectionName, obj) {
db.collection(collectionName)
.add(obj)
.then((docRef) => {
console.log("Document written with ID: ", docRef.id);
})
.catch((error) => {
console.error("Error adding document: ", error);
});
};
saveDocument("user", new User("Jhon", "NY"));