我们如何从集合中获取单个文档,同时又防止db遍历所有文档来查找特定文档?
我最近检查了Firestore数据库的“使用情况”,并且我是唯一可以访问它的人。我的第一张发票说“ 400k +”读/写(在重载数据时等)。但是从现在到今天,当我从文档字段中仅获得9行值时,它说读取1.2k +。
这是我获取数据(单击按钮)的方式:
final DocumentReference docRefData = db.collection(-ref-).document(-ref-);
docRefData.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
pDialogLoading.dismissWithAnimation();
Log.d(TAG,"-ref-: completed...");
if(task.isSuccessful()){
// If task is successful, We can get the result!
DocumentSnapshot document = task.getResult();
if(document.exists()){
Log.d(TAG, "-ref-: DocumentSnapshot data: " + document.getData());
Map<String, Object> map = document.getData();
if (map != null) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
-ref-.add(entry.getValue().toString());
}
System.out.println("-ref-: "+-ref-.size());
Collections.sort(-ref-);
Log.d(TAG,"-ref- result: "+-ref-);
showStationInfo(-ref-.get(-ref-).substring(1)
,-ref-.get(-ref-).substring(1)
,-ref-.get(-ref-).substring(1)
,-ref-.get(-ref-).substring(1)
,-ref-.get(-ref-).substring(1)
,-ref-.get(-ref-).substring(1)
,-ref-.get(-ref-).substring(1)
,-ref-.get(-ref-).substring(1)
,-ref-.get(-ref-).substring(1));
Log.d(TAG, "-ref-: Last -> " + -ref-.toString());
}
}else{
Log.d(TAG,"No such document");
}
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG,"-ref-: Get document failed: "+e.getMessage());
}
});
关于什么导致此代码的高读取率的任何想法?据我了解,dB是从上到下读取的,以便找到我想要的值。而且,ofc非常愚蠢。但是也许没有其他方法可以得到它?
谢谢