用户需要能够基于数据库中的名字查找一个人的名字。用户将在输入字段中输入3个字母,然后在其中firstname
包含搜索值的Firestore对象中进行搜索。
从Firestore返回的对象似乎与查询的逻辑不匹配。我正在做一个匹配>=
,将搜索值与名字值进行比较。但是,当我输入Joe
时,我同时得到了“ John Doe”和“ Patty O'chair”。
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个用户定期进行查询,我是否应该返回所有数据并在前端进行查询?我真的没有时间去学习如何与弹性搜索集成,对于目前如此小的应用程序,这可能还太多了。