java – 添加新字段或更改所有Firestore文档的结构
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 添加新字段或更改所有Firestore文档的结构,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1667字,纯文字阅读大概需要3分钟。
内容图文
![java – 添加新字段或更改所有Firestore文档的结构](/upload/InfoBanner/zyjiaocheng/747/7645cda53bd74742b375ea32ed558ea4.jpg)
考虑一组用户.集合中的每个文档都有字段名称和电子邮件.
{
"users": {
"uid1": {
"name": "Alex Saveau",
"email": "saveau.alexandre@gmail.com"
},
"uid2": { ... },
"uid3": { ... }
}
}
现在考虑一下,通过这个有效的Cloud Firestore数据库结构,我启动了我的第一个版本的移动应用程序.然后,在某些时候我意识到我想要包含另一个字段,例如last_login.
在代码中,使用Java从Firestore DB读取所有用户文档将完成
FirebaseFirestore.getInstance().collection("users").get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
mUsers.add(document.toObject(User.class));
}
}
}
});
类User包含now name,email和last_login.
由于新的User字段(last_login)未包含在DB中存储的旧用户中,因此应用程序崩溃,因为新的User类需要last_login字段,该字段由get()方法返回为null.
将last_login包含在数据库的所有现有用户文档中的最佳做法是什么,而不会在新版本的应用程序上丢失数据?我应该只运行一次片段来执行此任务,还是有更好的方法来解决问题?
解决方法:
您陷入了NOSQL数据库的空白:面向文档的数据库不保证数据的结构完整性(如RDBMS那样)
这笔交易是:
>在RDBMS中,所有存储的数据在任何给定时间(在同一实例或集群内)具有相同的结构.更改结构(ER图)时,您必须迁移所有现有记录的数据,这些记录需要花费时间和费用.
结果,您可以针对当前版本的数据结构优化应用程序.
>在面向文档的数据库中,每个记录都是独立的“页面”,具有自己的独立结构.如果您更改了敲击,它只适用于新文件.因此,您无需迁移现有数据.
结果,您的应用程序必须能够处理您在当前数据库中使用过的所有数据结构版本.
我不详细了解firebase,但一般来说,你永远不会更新NOSQL数据库中的文档.您只能创建该文档的新版本.因此,即使您更新所有文档,您的应用程序也必须准备好处理“旧”数据结构…
内容总结
以上是互联网集市为您收集整理的java – 添加新字段或更改所有Firestore文档的结构全部内容,希望文章能够帮你解决java – 添加新字段或更改所有Firestore文档的结构所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。