Firebase:如何仅从集合中获取一个文档?防止从数据库读取大量数据

时间:2019-06-07 12:22:37

标签: android ios firebase firebase-realtime-database

我们如何从集合中获取单个文档,同时又防止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非常愚蠢。但是也许没有其他方法可以得到它?

谢谢

0 个答案:

没有答案