javascript - 我们如何在 Firestore 数据库中搜索 5,000 个用户?

标签 javascript firebase vue.js google-cloud-firestore vuetify.js

我们有一个人员配置应用程序,使用 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/

相关文章:

Firebase 服务器时间戳与本地(几乎)相同

javascript - TypeError : firebaseApp. firestore 不是函数

webpack - 在应用内显示 vue 组件的来源

javascript - VueJS : v-on:click not working on clicking the <button>

javascript - 如何从 jquery 对话框中添加和删除表

javascript - 在 a 和 div #ID 的末尾添加水平线

javascript - 对于每个循环,获取点击事件 jQuery 的 td 值

javascript - 数组元素作为 Json 字段

vue.js - 如果模式在 vue 组件上关闭,如何重置下拉数据?

javascript - 如何使用 jQuery 和 XML 数据更改使用 CSS 的 HTML 元素?