android - 我如何在 Firestore 中使用 DocumentRecerence?
问题描述
如何在 Firestore 中设置子收集?
这是我的实时数据库格式
我试着用这种方式db.collection("Report").document("Post").set(hashMap).addOnSuccessListener
但它无法设置我的帖子 ID (-MkllN0v3il1s85g4BT4)
-MkllN0v3il1s85g4BT4 是我的帖子 ID。
然后我用DocumentReference d1 = db.document("Report/Post");
但是如何设置 document(postid) ?
实时DB hashMap方式
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Report").child("Post");
reference.addListenerForSingleValueEvent(new ValueEventListener() {
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("publisher",FirebaseAuth.getInstance().getCurrentUser().getUid());
hashMap.put("time", ServerValue.TIMESTAMP);
hashMap.put("info", edt_comment.getText().toString());
reference.child(postModel.getPostid()).setValue(hashMap);
解决方案
如果您想完全自由地确定要存储的树,您应该坚持使用实时数据库。
另一方面,如果您想切换到 Firestore,则必须找到一种方法将您的数据模型(不仅是 JSON,还包括应用程序的模型)映射到 Firestore 的文档/集合模型中。
我发现将复数用于集合名称很有帮助,因此即使仅从名称中也可以清楚地看出这些是集合。文档名称通常由数据库本身或某些其他系统生成(例如用户的 UID,或日期/时间的时间戳)。
考虑到这些知识,我希望您的结构是:
Reports (collection)
$reportID (docs)
Posts (collection)
$postID (docs)
即使应用程序中只有一个报告,我也会使用这种方法。在这种情况下,我会为该报告使用固定的名称/文档 ID:
Reports (collection)
Default (doc)
Posts (collection)
$postID (docs)
如果您不希望扩大报告的数量,也不在Default
文档中存储报告的信息,您可以考虑完全删除顶级集合,并将其建模为:
ReportPosts (collection)
$postID (docs)
推荐阅读
- r - 检测数据帧两列中的循环
- laravel - 从blade.php文件调用时Vue组件不显示文本
- c# - .net core 无法将当前 JSON 数组反序列化为“Microsoft.AspNetCore.Http.IFormFile”类型
- javascript - 无法读取未定义 reactJS 的“属性”
- python-3.x - 即使不应该触发 if 语句,Pandas 也会追加重复的行
- node.js - NodeJS中的TCP套接字通信
- javascript - Sharepoint:Javascript - 获取列表数据(包括 LOOKUP 列)
- hashicorp-vault - 无法将 min_decryption_version 更改为 0
- javascript - 如何为 Object 中的数组数据实现 New FormData() 以使用 Axios、ReactJs 执行 POST 方法?
- python - 在 pygame 中创建随机且唯一的向量