javascript - 我们如何在 Firestore db 中搜索 5,000 个用户?
问题描述
我们有一个人员配置应用程序,使用 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
推荐阅读
- java - 如何生成从 24 小时前到当前系统时间的任何随机时间?
- python - 即使用户登录,request.user.is_authenticated 也会返回 false。经过身份验证的用户不起作用
- reactjs - 需要帮助从状态中的自动完成(多个)中捕获用户选择(反应)
- c# - 未使用 Condition 恢复包引用
- laravel - 在 Laravel 8 中将图像保存为数据库中的 tmp
- python - 如何将完美正方形拟合到包含不完美正方形的模糊图像边缘的 ndarray 矩阵上?
- r - 有没有办法在一个 Rscript 中按块编织多个 HTML 文档?
- c - 为什么 64 位 Visual Studio C 中的 CreateWindow 在创建时会自行销毁?
- sql - SQL 比较表的行与多列
- haskell - Haskell 美元运算符和中缀运算符