Невозможно получить данные из Cloud Firestore, используя запросы - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь получить набор данных из моего Cloud Firestore, чтобы я мог упорядочить данные в таблице «Bootstrap», отображая имя и счет из документов Firestore. Расположение FireStore здесь.

Я создал ссылку на коллекцию пользователей и запросил ее для получения данных, однако, когда я запускаю ее, она выдает исключение «Uncaught ReferenceError: querySnapshot не определен».

<script>
var usersCollectionRef = db.collection("users"); //Creates a reference to the Users collection
var query = usersCollectionRef.orderBy("score", "desc").limit(10); //Creates a query based on the collection
query.get().then(function(querySnapshot) { //If query is needed
            if (querySnapshot.empty) { //Check whether there are any documents in the result
                console.log('no documents found');
            } else {
                    querySnapshot.docs.map(function (documentSnapshot) {
                        var name =      documentSnapshot.data().name;
                        var score =         documentSnapshot.data().score;
                        console.log(name + score);          
                    });
            }
});
</script>

Моя цель - извлечь все документы из коллекции пользователя, упорядочить и отсортировать их с помощью встроенных методов .limit и orderBy, а затем сохранить их в массиве, чтобы их можно было отобразить с помощью таблицы «Bootstrap». var query = usersCollectionRef.orderBy("score").limit(10); //Selects the 10 highest scoring player's documents

1 Ответ

0 голосов
/ 03 мая 2018

Примечание для потенциальных читателей: первая часть ответа соответствует первоначальному вопросу ОП до его редактирования.

Вы должны поместить вторую часть своего кода в функцию then(), как показано ниже. Это потому, что get() возвращает «обещание, которое будет выполнено с результатами запроса». (см. ссылку https://firebase.google.com/docs/reference/js/firebase.firestore.CollectionReference#get)

var usersCollectionRef = db.collection("users"); //Creates a reference to the Users collection

var query = usersCollectionRef.where("name", "==", "Steeve"); //Creates a query based on the collection

query.get().then(function(querySnapshot) { //Call get() to get a QuerySnapshot

            if (querySnapshot.empty) { //Check whether there are any documents in the result
                console.log('no documents found');
            } else {
                    querySnapshot.docs.map(function (documentSnapshot) {
                        //Not necessary to do that  -> return documentSnapshot.data();
                        console.log(documentSnapshot.data().name); 
                    });
            }

});

РЕДАКТИРОВАТЬ после вашего комментария:

В случае, если у вас есть несколько документов для данного имени с другим счетом (в числовом поле score), вы можете получить общий счет следующим образом:

var usersCollectionRef = db.collection("users"); //Creates a reference to the Users collection

var query = usersCollectionRef.where("name", "==", "Steeve"); //Creates a query based on the collection

query.get().then(function(querySnapshot) { //Call get() to get a QuerySnapshot

    var score = 0;

    if (querySnapshot.empty) { //Check whether there are any documents in the result
        console.log('no documents found');
    } else {
        var data = querySnapshot.docs.map(function (documentSnapshot) {
            //Not necessary to do that  -> return documentSnapshot.data();
            console.log(documentSnapshot.data().name);
            score += documentSnapshot.data().score;
        });
    }

    console.log(score);

});

РЕДАКТИРОВАТЬ после редактирования исходного поста

Сделай так

var query = usersCollectionRef.orderBy("score", "desc").limit(10); //Creates a query based on the collection
query.get().then(function(querySnapshot) { //If query is needed
            if (querySnapshot.empty) { //Check whether there are any documents in the result
                console.log('no documents found');
            } else {
                var nameArray =  Array.from(querySnapshot.docs, x => x.data().name);
                console.log(nameArray);

                var scoreArray =  Array.from(querySnapshot.docs, x => x.data().score);
                console.log(scoreArray);
            }
});

Пояснения:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...