Firestore查询where()。 -返回意外结果

时间:2019-10-13 14:26:58

标签: reactjs firebase redux google-cloud-firestore react-redux

客观

用户需要能够基于数据库中的名字查找一个人的名字。用户将在输入字段中输入3个字母,然后在其中firstname包含搜索值的Firestore对象中进行搜索。

我的设置

  • 一旦收到新道具,请拨打redux动作。
  • 如果长度大于3,则使用此值查询Firestore。
  • 将记录推入数组并将其作为有效负载添加到我的 减速器
  • 此reducers状态已映射到Props。
  • 在组件中显示结果数据。

问题

从Firestore返回的对象似乎与查询的逻辑不匹配。我正在做一个匹配>=,将搜索值与名字值进行比较。但是,当我输入Joe时,我同时得到了“ John Doe”和“ Patty O'chair”。

Redux动作

export const queryBidder = (value) => {
  return async (dispatch, getState, { getFirestore }) => {
    const firestore = getFirestore();
    const normalizeValue = _.capitalize(value);
    let Query = []
    if(value.length >= 3) {
        await firestore.collection("bidders").where('firstname', ">=", normalizeValue).get()
    .then(snapshot => {
      if (snapshot.empty) {
        console.log('No matching bidders.');
        return;
      }  
      snapshot.forEach(doc => {
        console.log("search by", normalizeValue)
        console.log("firstname returned,", doc.data());
        Query.push(doc.data());
      });
      dispatch({ type: actionTypes.QUERYBIDDER, Query: Query });
    })
    .catch(err => {
      console.log('Error getting documents', err);
    });
    } else {
      dispatch({ type: actionTypes.CLEARQUERY });
    }
  }
};

问题

我已经阅读了一些文章,看来Firestore并非用于此类行为。至少可以满足我在这里的要求,而我做错了吗?

如果没有,我在这里有哪些选择?我预计将有大约100个人按10个用户定期进行查询,我是否应该返回所有数据并在前端进行查询?我真的没有时间去学习如何与弹性搜索集成,对于目前如此小的应用程序,这可能还太多了。

0 个答案:

没有答案