Запрос данных из коллекции Firebase - PullRequest
0 голосов
/ 07 декабря 2018

Я много лет работаю в стеке LAMP и изо всех сил пытаюсь обдумать сложные запросы к базам данных Firebase и NoSQL.Я хотел бы вернуть 5 случайных документов из коллекции.Ниже приведен код VueJS, написанный на данный момент:

Вот объект данных, который я создал:

data () {
    return {
        courseIds: [],
    }
}

Вот мой созданный хук жизненного цикла, где я запрашиваю базу данных Firebase NoSQL:

created() {
    // fetch data from firestore
    database.collection('courses').get()
        .then(snapshot => {
            snapshot.forEach(doc => {
                let course = doc.data()
                course.id  = doc.id

                this.courseIds.push(course.id)
            })
        })          
}

Поскольку я пытаюсь рандомизировать возвращаемые данные, я добавил хук жизненного цикла beforeMount, который вызывает метод случайного перемешивания Фишера-Йейтса.План состоял в том, чтобы перетасовать возвращенные данные, а затем вернуть только первые 5 документов:

beforeMount() {
    this.courseIds = this.shuffle(this.courseIds)
}

И метод:

methods: {
    shuffle: function(array) {
        var m = array.length, t, i;

        while (m) {
            i = Math.floor(Math.random() * m--);

            t = array[m];
            array[m] = array[i];
            array[i] = t;
        }

        return array;
    }
}

Я ученик, который медлит, поэтому, скорее всего,это простой подход к проблеме.Моя текущая проблема заключается в том, что Firebase возвращает идентификаторы как объект, а не как массив, поэтому мой метод случайного выбора не работает, как ожидалось.См. console.log() ниже:

[__ob__: Observer]
0: "0HnqJ8zZg1Rs3D4qod4l"
1: "1gZmoUpCOSDeLsYMDi4v"
2: "JrJj3a84qKTD72ncvGXd"
3: "LWMbY98m3sKLrHNDSUkW"
4: "SUn1kxHzMo7fu5urpNB5"
5: "kQRWQIj0mFXIWVJcaouY"
length: 6
__ob__: Observer {value: Array(6), dep: Dep, vmCount: 0}
__proto__: Array

У кого-нибудь есть лучший подход к этой функциональности или хороший способ преобразовать courseIds в массив, который нужно перемешать?

1 Ответ

0 голосов
/ 08 декабря 2018

Что произойдет, если вы сделаете немного по-другому, как показано ниже:

created() {
    // fetch data from firestore
    database.collection('courses').get()
        .then(snapshot => {
            let courseIdsArray = [];
            snapshot.forEach(doc => {
                courseIdsArray.push(doc.id);
            });    
            this.courseIds = courseIdsArray;
        });          
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...