我们有一个人员配置应用程序,使用 vuejs 和一个拥有 5,000 多个用户的 firestore 数据库构建。我们的挑战是,我们需要一个布局供管理员在数据库中搜索用户。
以前,我们将所有用户加载到 Users.vue 布局上,然后在 Vuetify 数据表中搜索/查看它们。现在的问题是我们的用户太多了。该布局加载速度太慢,甚至会导致应用程序在移动浏览器上崩溃。
我们试图实现的解决方案是在数据库中搜索用户,然后仅将这些结果加载到我们的数据表中。只要“名称”准确无误,下面的代码(使用 vuex)就可以工作。
getUsersState({commit}, payload){
fb.usersCollection.where("name", "==", payload.search).limit(10).onSnapshot(querySnapshot => {
let usersArray = []
console.log(payload.search)
querySnapshot.forEach(doc => {
let user = doc.data()
user.id = doc.id
usersArray.push(user)
})
commit('setUsers', usersArray)
})
},
问题是,即使我们只输入姓名甚至电子邮件地址的前几个字母,我们也需要它工作。 Firestore 仅提供 ==、>=、<=、> 和 < 参数。并且“array-contains”仅适用于数组,不适用于我们的“用户”对象。
在 Users.vue 上:
created () {
console.log('getting users')
this.$store.dispatch("getUsersState", {search: this.search})
},
computed: {
...mapState(['currentUser', 'users', 'userProfile']),
isAdmin: function() {
return this.userProfile.accessLevel >= 5
},
isUsers: function() {
return this.users
}
},
watch: {
search: 'updateSearch'
},
methods: {
clearSearch () {
return this.isSearch = ''
},
updateSearch() {
this.$store.dispatch("getUsersState", {search: this.search})
},
},
有谁知道如何通过仅输入姓名的前几个字母来搜索 firestore 数据库中的用户吗?
最佳答案
集成全文搜索引擎,并使其与 Firestore 保持同步。实现起来并不简单。官方文档推荐Algolia:https://firebase.google.com/docs/firestore/solutions/search
关于javascript - 我们如何在 Firestore 数据库中搜索 5,000 个用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54815801/