我已经在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生命周期挂钩,该挂钩调用了Fisher-Yates随机播放方法。计划是重新整理返回的数据,然后仅返回前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将Ids作为对象而不是数组返回,因此我的shuffle方法无法按预期工作。请参见下面的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转换为要改组的数组的好方法?
答案 0 :(得分:1)
如果您做一些不同的操作会发生什么,如下所示:
created() {
// fetch data from firestore
database.collection('courses').get()
.then(snapshot => {
let courseIdsArray = [];
snapshot.forEach(doc => {
courseIdsArray.push(doc.id);
});
this.courseIds = courseIdsArray;
});
}