是否有任何查询匹配数据字段的起始值并检索firebase中的数据

是否有任何查询匹配数据字段的起始值并检索firebase中的数据,firebase,google-cloud-firestore,google-cloud-functions,Firebase,Google Cloud Firestore,Google Cloud Functions,我正在制作一个应用程序,其中我必须对汽车数据使用CRUD操作。cars数据存储在集合(“cars”)中,文档中有许多数据字段 我们举一个简单的例子 在一个系列中,有两款车被命名为“奥迪”和“宝马” 如果我想用CarName搜索一辆汽车,并通过点击搜索按钮在搜索文本框中输入“aud”,它将通过将其声明字符与汽车名称匹配,向我显示一辆名为“audi”的汽车 我想要的问题的解决办法是 firestore中是否有任何查询可以让我通过在搜索文本框中输入文档的起始字符来获取文档 您可以利用\uf8ff字符

我正在制作一个应用程序,其中我必须对汽车数据使用CRUD操作。cars数据存储在集合(“cars”)中,文档中有许多数据字段

我们举一个简单的例子

在一个系列中,有两款车被命名为“奥迪”和“宝马”

如果我想用CarName搜索一辆汽车,并通过点击搜索按钮在搜索文本框中输入“aud”,它将通过将其声明字符与汽车名称匹配,向我显示一辆名为“audi”的汽车

我想要的问题的解决办法是

  • firestore中是否有任何查询可以让我通过在搜索文本框中输入文档的起始字符来获取文档

您可以利用
\uf8ff
字符在Unicode范围内是一个非常高的代码点,位于Unicode中大多数常规字符之后,并编写如下查询:

  db.collection('CARS')
    .orderBy('carName')
    .startAt('aud')  // Looking for aud___
    .endAt('aud\uf8ff')
    .get()
    .then((querySnapshot) => {...})
    .catch(error => {
        console.log(error);
    });

更新以下评论: 在Firebase控制台中,您应该看到如下新索引(
carType-Ascending-carName-Ascending
):


这是可行的,但还有一件事我们可以加入where()查询吗?比如where('carType','=','auction')。我将where()与endAT()一起使用,但它不起作用。是的,您可以执行
db.collection('CARS')。where('carType','=','auction')。orderBy('carName')。startAt('Aud')。endAT('Aud\uf8ff')。get()
,但您需要为此类查询声明索引。第一次执行此查询时,您将收到一个错误(不要忘记捕获它),并且错误消息将包含一个URL,如果您通过浏览器调用它,该URL将生成索引。如果我的答案对你有帮助,请向上投票,看看索引已经创建,但仍然不起作用。你有没有看到任何错误?它应该可以正常工作。错误消息告诉我创建索引,我按照以下步骤操作,但在刷新浏览器后,每次我运行查询时,错误消息仍会提示,这是我的代码。db.collection(“cars”).where(“carType”),“==”,radio.orderBy(“name”).startAt(searchText).endAt(
${searchText}\uf8fff
).get().then((snapshot)=>setSearchCar(snapshot.docs.map((car)=>({id:car id,car:car.data()).catch((errorMessage)=>console.log(errorMessage));