Firebase firestore js多个orderBy未排序结果
我正在尝试执行一个查询,该查询包含2个orderBy,后面是一个startAt,它在第一个orderBy orderId上应用了一个过滤器: 让result=wait db//db=firebase.firestore .收款“/订单” .其中'userId','=',userId//userId='zHJgWUFL54deq4a…' .orderBy'orderId' .orderBy'co','desc' .startAtfilter//filter='2020-01-YND' 收到 订单收集: 创建的复合索引: 结果:结果不按co降序排序 我在firestore的github中创建了一个问题,当我得到答案时,我会在这里和那里进行更新 多谢各位 --------------------------- 更新: 不幸的是,切换orderBy的问题是我没有得到任何结果。。。我已经创建了综合索引。 筛选器用于搜索orderId搜索文本,而不是全文搜索,因为它不受支持 因此,这两个查询返回[]:Firebase firestore js多个orderBy未排序结果,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我正在尝试执行一个查询,该查询包含2个orderBy,后面是一个startAt,它在第一个orderBy orderId上应用了一个过滤器: 让result=wait db//db=firebase.firestore .收款“/订单” .其中'userId','=',userId//userId='zHJgWUFL54deq4a…' .orderBy'orderId' .orderBy'co','desc' .startAtfilter//filter='2020-01-YND' 收到 订单
// changed orderBy order
let result = await db // db = firebase.firestore()
.collection('/orders')
.where('userId', '==', userId) // userId = 'zHJgWUFL54deq4a...'
.orderBy('co', 'desc')
.orderBy('orderId')
.startAt(filter) // filter = '2020-01-YND'
.get()
and:
// added endAt
let result = await db // db = firebase.firestore()
.collection('/orders')
.where('userId', '==', userId) // userId = 'zHJgWUFL54deq4a...'
.orderBy('co', 'desc')
.orderBy('orderId')
.startAt(filter) // filter = '2020-01-YND'
.endAt(filter + '\uf8ff')
.get()
但是,如果我删除orderBy'co',desc',我会得到结果,但仍然不是我想要的:
let result = await db // db = firebase.firestore()
.collection('/orders')
.where('userId', '==', userId) // userId = 'zHJgWUFL54deq4a...'
.orderBy('orderId')
.startAt(filter) // filter = '2020-01-YND'
.endAt(filter + '\uf8ff')
.get()
returns:
// Item 1
{
"co": 0,
"userId": "zHJgWUFL54deq4a...",
"orderId": "2020-01-YNDKALCK"
}
// Item 2
{
"co": 1,
"userId": "zHJgWUFL54deq4a...",
"orderId": "2020-01-YNDSCSAD"
}
如果我正确理解了您的问题,我想您可能没有注意到,当您按多个字段排序时,文档是按照方法链中orderBys的顺序排序的 正如报告中所述: 您还可以按多个字段排序。例如,如果你想 按州排序,每个州内按人口排序 降序排列:
let byStateByPop = citiesRef.orderBy('state').orderBy('population', 'desc');
换句话说,在您的例子中,结果首先按orderId排序,然后在每个orderId中按co排序
因此,您下面的结果是正确的,因为2020-01-YNDKALK在2020-01-YNDSCSAD之前:
您应该尝试使用共享相同orderId值的记录
如果您希望结果首先由co排序,只需交换orderBy并构建新索引。向我们展示您的索引的外观,并请将您的数据库结构添加为屏幕截图。谢谢,但很遗憾,我的问题仍然无法解决
// changed orderBy order
let result = await db // db = firebase.firestore()
.collection('/orders')
.where('userId', '==', userId) // userId = 'zHJgWUFL54deq4a...'
.orderBy('co', 'desc')
.orderBy('orderId')
.startAt(filter) // filter = '2020-01-YND'
.get()
and:
// added endAt
let result = await db // db = firebase.firestore()
.collection('/orders')
.where('userId', '==', userId) // userId = 'zHJgWUFL54deq4a...'
.orderBy('co', 'desc')
.orderBy('orderId')
.startAt(filter) // filter = '2020-01-YND'
.endAt(filter + '\uf8ff')
.get()
let result = await db // db = firebase.firestore()
.collection('/orders')
.where('userId', '==', userId) // userId = 'zHJgWUFL54deq4a...'
.orderBy('orderId')
.startAt(filter) // filter = '2020-01-YND'
.endAt(filter + '\uf8ff')
.get()
returns:
// Item 1
{
"co": 0,
"userId": "zHJgWUFL54deq4a...",
"orderId": "2020-01-YNDKALCK"
}
// Item 2
{
"co": 1,
"userId": "zHJgWUFL54deq4a...",
"orderId": "2020-01-YNDSCSAD"
}
let byStateByPop = citiesRef.orderBy('state').orderBy('population', 'desc');
// Item 1
{
"co": 0,
"userId": "zHJgWUFL54deq4a...",
"orderId": "2020-01-YNDKALCK"
}
// Item 2
{
"co": 1,
"userId": "zHJgWUFL54deq4a...",
"orderId": "2020-01-YNDSCSAD"
}