Where()和orderBy()过滤器在过滤firebase数据时不能一起工作

xqnpmsa8  于 2023-11-21  发布在  其他
关注(0)|答案(3)|浏览(115)

我有一个饲料,显示用户的艺术品。我想过滤的类别和时间,用户发布的用户职位,使饲料将有最新的职位接近页面的顶部。我使用一个firebase函数来检索这些数据。
我有一个firestore系列,看起来像这样

tasks -tasksID- 
                {
                   category: art
                   date: 16 october at 3:00pm
                     images: {
                                0 image1
                                1 image2
                             }
                  }

字符串
firebase函数:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin'

admin.initializeApp()

export const getFeed = functions.https.onCall(async (req,res) =>{
  const docs = await admin.firestore().collection('tasks').where('category', 
    '==', 'art').orderBy('date', 'desc').limit(20).get()    
    return docs.docs.map(doc => {
    return {
        postID: doc.id,
        ...doc.data()
         }
     }) 
 })


艺术饲料 typescript :

artFeed (){    
  const getFeed = this.aff.httpsCallable('getFeed')
  this.ajax = getFeed({}).subscribe(data=> {
    console.log(data)
    this.posts =  data
      })  
  }


然而,我在控制台上得到一个错误,说“错误错误:错误”。
当我单独使用where()函数和orderby()函数时,这个函数工作得很好。
这也是我的数据库索引的样子。

collectionId      Fields indexed       Query scope            Status 

              category Ascending
tasks         uid Ascending              Collection            Enabled 
              date Ascending

tasks        category Ascending          
             uid Ascending                Collection            Enabled
             date Descending

vcirk6k6

vcirk6k61#

您需要添加一个特定的索引,如下所示:

collectionId      Fields indexed       Query scope            Status 

              
tasks             category Ascending   Collection             Enabled 
                  date Descending

字符串

lbsnaicq

lbsnaicq2#

只有在过滤同一字段时,才可以在使用范围比较运算符时组合合并Where()OrderBy()
正如firebase文档所述:
但是,如果你有一个带有范围比较(<,<=,>,>=)的过滤器,你的第一个排序必须在同一个字段上:

  • 有效值> citiesRef.where("population", ">", 100000).orderBy("population")
  • 无效> citiesRef.where("population", ">", 100000).orderBy("country")

https://firebase.google.com/docs/firestore/query-data/order-limit-data
因此,您需要在后端执行一个操作,在前端执行另一个操作

jljoyd4f

jljoyd4f3#

有同样的问题,但当我运行应用程序时,它在控制台中记录了一个错误,该查询需要创建一个复合索引,它给了我一个链接,通过点击,我能够创建,花了几分钟的时间来enble.之后,它的工作..希望有人会帮助

相关问题