在谈论Firebase Cloud Firestore时,这种非规范化到底意味着什么?我在互联网上阅读了几篇文章,并在此处找到了一些关于stackoverflow的答案,大多数答案都推荐这种方法。这种非规范化真正有什么帮助?总是有必要吗?
数据库扁平化和非规范化是一回事吗?
这是我的首要问题,希望我能找到一个可以帮助我理解这一概念的答案。我知道是不同的,但是我有两年的MySQL经验。
如何编辑此代码以便在 Firestore 中创建自己的自定义文档 ID?
users.add(new Accounts(fname, lname, uname, email, pass)).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Toast.makeText(CreateAccount.this, "Data saved to FireStore", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, e.toString());
}
});
Run Code Online (Sandbox Code Playgroud) 这是 firebase Firestore 中保存的部分数据:
在 Java 中如何fName从 ()获取 ( newFriend0)?
这是代码的一部分。它给出了整个地图。我只想要一个特定的字段,例如 (“jem” for (fName))
Map<String, Object> map = document.getData();
for (Map.Entry<String, Object> entry : map.entrySet()){
if (entry.getKey().equals("Friends")){
f=document.getString("FName");////not worked
Log.d("TAG", entry.getValue().toString());
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个 ArrayList,其中包含我想要获取的所有 id。有没有办法可以使用列表获取多个文档及其字段值。另外,如果我必须手动创建一个 for 循环来获取每个文档,我该怎么做?
Firestore数据结构:
Users:
user1:
field1 :
field2 :
field3 :
field4 :
user2:
field1 :
field2 :
field3 :
field4 :
user3:
field1 :
field2 :
field3 :
field4 :
Run Code Online (Sandbox Code Playgroud)
该列表包含:user1、user2、user3 等等...
编辑1:我尝试使用for循环来获取它,但它给出了一个空指针异常FriendsData.add(userDetails);
for (String doc : list_of_Friends) {
FirebaseFirestore.getInstance().collection("Users").document(doc).get()
.addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
FamilyMember userDetails = documentSnapshot.toObject(FamilyMember.class);
FriendsData.add(userDetails);
}
});
Run Code Online (Sandbox Code Playgroud)
编辑2:
循环的另一个逻辑也给出了相同的错误。当我登录时,我可以看到doc&都ds.getId()在获取值
FirebaseFirestore.getInstance().collection("Users").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful())
for (DocumentSnapshot …Run Code Online (Sandbox Code Playgroud) 我正在尝试将媒体数据存储在云中的某个位置,并通过我的 Android 应用程序下载它们。我发现这应该由谷歌云平台来完成。
但当我开始调查时,我了解到我首先需要拥有 Firebase Storage。那么我还需要云平台吗?这不是同一件事吗?
说实话我不明白这两者之间的区别。
那么Google Cloud Platform和Firebase Storage之间有什么区别和联系呢?以及他们如何合作?
我们希望将海量数据(假设有 2000 万)从 Mongo DB 迁移到 Firestore。
我知道我们可以通过编程来做到这一点,但是有什么工具吗?
我正在迁移我的应用程序以使用 Firebase Firestore,并且我的模型之一非常复杂(包含其他自定义对象的列表)。查看文档,了解如何将模型对象作为文档提交,看起来您只需使用公共构造函数以及 getter 和 setter 创建模型对象。
例如,来自添加数据指南:
public class City {
private String name;
private String state;
private String country;
private boolean capital;
private long population;
private List<String> regions;
public City() {}
public City(String name, String state, String country, boolean capital, long population, List<String> regions) {
// getters/setters
}
Run Code Online (Sandbox Code Playgroud)
Firestore 会自动将其与文档进行相互转换,无需任何其他步骤。您将一个实例传递给DocumentReference.set(city)调用,并从调用中检索它DocumentSnapshot.toObject(City.class)
它到底是如何将其序列化为文档的?通过反思?它没有讨论任何限制。基本上,我想知道这是否适用于更复杂的模型,以及有多复杂。它适用于具有自定义对象的类吗ArrayList?
我正在使用 Firestore 数据库创建聊天模块。以下是我侦听新消息的侦听器代码:
mDb.collection("Users_Collection").document(mAuth.getUid()).collection("Recipients")
.document(psychichObj.getUid()).collection("Messages").orderBy("time").limit(30)
.addSnapshotListener(MetadataChanges.INCLUDE, new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if (e==null){
for (DocumentChange dc:queryDocumentSnapshots.getDocumentChanges()){
switch (dc.getType()){
case ADDED:
Log.d("chatevents", "onEvent:Added ");
messgaesDataClass msg = dc.getDocument().toObject(messgaesDataClass.class);
messages.add(msg);
chatAdapter.notifyDataSetChanged();
messagesRecycler.smoothScrollToPosition(messages.size());
break;
case REMOVED:
Log.d("chatevents", "onEvent:Removed ");
case MODIFIED:
Log.d("chatevents", "onEvent:Modiefied ");
}
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
当我发送消息时,我想知道如何侦听本地缓存中的 msg 对象或其元数据处于挂起状态但尚未发送到服务器的消息?
我目前正在使用Cloud Firestore以及云存储,并且在向我的应用添加必要的依赖项后,我会立即收到这些错误消息:
Failed to resolve: firebase-firestore-15.0.0
Failed to resolve: firebase-storage-15.0.0
Failed to resolve: firebase-auth-15.0.0
Run Code Online (Sandbox Code Playgroud)
我很确定我必须修复代码行,但我不知道我要编辑哪个部分:
我正在开发 Flutter 应用程序,并且正在使用 Firebase 服务。我只想坚持使用事务,因为我更喜欢一致性而不是简单性。
await Firestore.instance.collection('user').document(id).updateData({'name': 'new name'});
await Firestore.instance.runTransaction((transaction) async {
transaction.update(Firestore.instance.collection('user').document(id), {'name': 'new name'});
});
Run Code Online (Sandbox Code Playgroud)
交易有任何(主要)缺点吗?例如,它们是否更贵(Firebase 计费,而不是计算)?毕竟 Firestore 数据库上的数据可能会发生更改,这将导致最多 5 次重试。
供参考:https : //firebase.google.com/docs/firestore/manage-data/transactions
“您还可以使用事务对数据进行原子更改。虽然这对于增加投票总数来说有点笨拙,但对于更复杂的更改来说这是正确的方法。”
https://codelabs.developers.google.com/codelabs/flutter-firebase/#10
当我使用addSnapshotListener进行实时更新时,文档会重复,这不应该是这种情况,但是当使用getDocuments()文档仅重复一次时,我需要使用addSnaphotListener但不想重复文档读取,请协助我哪里错了使用快照监听器。
我在 Swift iOS 中使用 Firestore 数据库。下面是我正在使用的代码
代码addSnapShotListener():
func getComments() {
//print(postId + "received")
let commentsRef = Firestore.firestore().collection("posts").document(postId).collection("comments")
commentsRef.addSnapshotListener { (snapshot, error) in
if let error = error {
print(error.localizedDescription)
} else {
if let snapshot = snapshot {
for document in snapshot.documents {
// self.length = snapshot.count
let data = document.data()
let username = data["comment_author_username"] as? String ?? ""
let comment = data["comment_author_comment"] as? String ?? ""
let spinnerC = data["comment_author_spinnerC"] as? String …Run Code Online (Sandbox Code Playgroud) 我有大量数据(大小大于 500kB),但始终小于 1MB。我可以将这些 blob 存储在 Cloud Storage 之类的地方,但直接从 Firestore 读取/写入它们会方便得多。
Firestore 可以容纳最大 1MB 的文档,因此我的 blob 将适合 Firestore 文档,但Firestore 文档还指出:
Firestore 针对存储大量小文档进行了优化。
这让我认为读取和写入接近 1MB 限制的大量文档会对 Firestore 的性能产生负面影响,从而减慢对其他不相关小文档的访问速度。是这样吗?