我正在创建一个基于 Cloud Firestore 的应用程序。应用程序的工作方式将与 uber 相同。所以问题是,由于我对 NoSQL 数据库相当陌生,我在为数据库创建良好的结构时遇到了问题。这是我计划用于我的 Android 应用程序的 UML 的链接。我计划使用 Firestore 存储有关用户的信息和其他数据,而实时数据库用于实时地图更新。
我主要关心的是,正如您在 UML 中看到的,它以某种方式显示不同表之间的关系,但 NoSQL 没有表和关系,这让我在这里遇到困难。经过大约 4 个小时的连续互联网搜索后,我仍然不知道该怎么办。我在这里有一些问题希望得到解答:
1)有什么方法可以在不同集合之间创建关系吗?
2)我应该将所有 3 种类型的用户保存在同一集合“用户”中,还是为根中的每种类型创建不同的集合。使用这两种方法会产生什么后果。
如果我使用第一种方法,我可以做什么来区分每种类型的用户。
3)我可以在单个集合(即集合中的子集合)中进行多少深度嵌套?
4)我在同一个应用程序中使用两个不同数据库的决定正确吗?
5)Firebase 是我正在创建的应用程序的正确选择吗?
这些问题可能听起来太初学者了,因为我才刚刚学习。任何帮助,将不胜感激。任何有用的文档、文章或指南的链接也将不胜感激。
我从Google Firebase服务中看过视频并阅读了Cloud firestore的文档,但我无法想象实时数据库.
我想到了这个Web应用程序,我希望从不同类别的产品中存储我的提供程序.我希望通过我的所有产品执行搜索查询,以查找我对此类产品的提供商,并最终访问该提供商信息.
我打算为此目的使用这个结构:
Providers ( Collection )
Provider 1 ( Document )
Name
City
Categories
Provider 2
Name
City
Products ( Collection )
Product 1 ( Document )
Name
Description
Category
Provider ID
Product 2
Name
Description
Category
Provider ID
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,一旦我得到我想要的产品,这种方法是否是访问提供商信息的正确方法?
我知道这在实时数据库中是可行的,使用我可以在提供者部分中搜索该提供者的提供者ID,但是使用Firestore我不确定它是否可能或者这是否正确.
java firebase firebase-realtime-database google-cloud-firestore
我正在开发一个聊天应用程序,我想存储我的消息的时间戳。我的消息数据类是:
import com.google.firebase.firestore.ServerTimestamp;
import java.util.Date;
public class messgaesDataClass {
private String messageText;
private int messageStatus;
private String messagefrom;
private @ServerTimestamp Date timestamp;
public messgaesDataClass(String messageText, int messageStatus, String messagefrom, Date time) {
this.messageText = messageText;
this.messageStatus = messageStatus;
this.messagefrom = messagefrom;
this.time = time;
}
public messgaesDataClass() {
}
public String getMessageText() {
return messageText;
}
public void setMessageText(String messageText) {
this.messageText = messageText;
}
public int getMessageStatus() {
return messageStatus;
}
public void setMessageStatus(int messageStatus) {
this.messageStatus = messageStatus; …Run Code Online (Sandbox Code Playgroud) 我有一个有日期对象的文档。
初始化 Firestore 的代码:
FirebaseFirestore fireStore = FirebaseFirestore.getInstance();
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
.setTimestampsInSnapshotsEnabled(true)
.build();
fireStore.setFirestoreSettings(settings);
firestore = fireStore;
Run Code Online (Sandbox Code Playgroud)
查询代码:
FirebaseFirestore db = FireStoreUtils.getInstance();
Query query= db.collection(viewType.collectionName());
query.whereLessThan("endDate", new Date());
return query.orderBy(viewType.sortProperty()).limit(PAGE_SIZE);
Run Code Online (Sandbox Code Playgroud)
我总是获取所有记录,并且看起来 where 子句没有被应用。在 Firebase 控制台上,我看到它endDate存储为时间戳。
来自 Firebase 控制台的文档:
createdDate: null (null)
description: "desc" (string)
endDate: February 3, 2019 at 11:18:58 PM UTC-8 (timestamp)
id: "-7475596197450085332" (string)
title: "title"
Run Code Online (Sandbox Code Playgroud) 我有带有startDate和 的文档endDate。startDate我想查询和之间的范围endDate。我可以在一个日期的范围之间查询,如下所示:
whereField("startDate", isGreaterThan: start).whereField("startDate, isLessThan: end)
Run Code Online (Sandbox Code Playgroud)
但我无法像这样查询两个字段:
whereField("startDate", isGreaterThan: start).whereField("endDate", isLessThan: end)
Run Code Online (Sandbox Code Playgroud)
在复合 where 语句中使用多个字段时,Firestore 会发生异常。
在我的应用程序中,我想在开始片段之前对我的数据库执行 4 次查询。
不知何故,我试图实现的是:
Task t1 = Query1.get().onSuccesListener.... ;
Task t2 = Query2.get().onSuccesListener.... ;
Task t3 = Query3.get().onSuccesListener.... ;
Task t4 = Query4.get().onSuccesListener.... ;
Run Code Online (Sandbox Code Playgroud)
我无论如何都找不到Task在 Android 中使用它们的方法,因此我尝试在 a 中运行查询AsynTask,然后AsyncTask使用 Latch等待所有操作完成onPostExecuted。
这是我AsyncTask的查询之一的示例。
private class GetLandlordsRoomQuery extends AsyncTask<Void, Void, Void> {
ArrayList<RoomPosted> landlordsRooms = new ArrayList<>();
@Override
protected Void doInBackground(Void... voids) {
Query removeNonTenant = FirebaseFirestore.getInstance()
.collection(DataBasePath.ROOMS.getValue())
.whereEqualTo("landlordID", FirebaseAuth.getInstance().getUid());
removeNonTenant.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (DocumentSnapshot d : …Run Code Online (Sandbox Code Playgroud) java android android-asynctask firebase google-cloud-firestore
我想更新 Firebase 中的文档。问题是您只能更新特定字段?
我想做这样的事情:
fs.collection("users").document(user.id).update(user)
Run Code Online (Sandbox Code Playgroud)
问题是 Kotlin 强制将字段放入更新中,如下所示:
fs.collection("users").document(user.id).update("firstname", user)
Run Code Online (Sandbox Code Playgroud)
但我不希望那样,我想用我的模型而不是字段来更新整个文档。
我正在使用 Firestore 构建社交媒体应用程序,我想知道构建好友请求数据的最佳方法是什么。
\n当用户 John 想要向 Mary 和 Anne 添加好友时,我是否创建一个名为的根集合friend_requests并添加 3 个文档:
userId其值将是 Mary 和 Anne\xe2\x80\x99s 的对象,其中包含他们的请求userId和status请求(待处理/接受/拒绝)userId作为键的文档和一个带有 JohnuserId和statusof request对象的数组userId和一个带有 JohnuserId和statusof request对象的数组现在,当安妮和玛丽接受好友请求时,我删除friend_requests集合中的所有三个文档,然后:
users根集合中)添加一个名为的子集合friends,其中包含已接受请求的朋友的 usersIds、displayNames 和 photoURL或者
\nfriends,为每个用户提供一个包含朋友信息的文档?它似乎有很多重复的数据,因此我正在尝试解决它并找到在 Firestore …
data-modeling nosql firebase google-cloud-platform google-cloud-firestore