Я много лет работаю в стеке 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 в массив, который нужно перемешать?