Я пытаюсь выполнить запрос, содержащий 2 orderBy, за которыми следует startAt (который применяет фильтр к 1-му orderBy (orderId)):
let result = await db // db = firebase.firestore()
.collection('/orders')
.where('userId', '==', userId) // userId = 'zHJgWUFL54deq4a...'
.orderBy('orderId')
.orderBy('co', 'desc')
.startAt(filter) // filter = '2020-01-YND'
.get()
Коллекция заказов :
// Item 1
{
"co": 0,
"userId": "zHJgWUFL54deq4a...",
"orderId": "2020-01-YNDKALCK"
}
// Item 2
{
"co": 1,
"userId": "zHJgWUFL54deq4a...",
"orderId": "2020-01-YNDSCSAD"
}
- Созданы составные индексы:
orders userId Ascending orderId Ascending co Descending Collection Enabled
RESULT : результат не отсортирован (по убыванию) по co .
// Item 1
{
"co": 0,
"userId": "zHJgWUFL54deq4a...",
"orderId": "2020-01-YNDKALCK"
}
// Item 2
{
"co": 1,
"userId": "zHJgWUFL54deq4a...",
"orderId": "2020-01-YNDSCSAD"
}
Instead of Item 2 first then Item 1
Я создал проблему в github firestore и обновлю ее тут и там, когда получу ответ.
Спасибо
--------------------------------------- --------------
Обновление:
К сожалению, проблема с переключением порядка из-за отсутствия результата ... Я уже создал составной индекс. фильтр используется для «поиска» orderId (поиск текста, а не полнотекстовый поиск, поскольку он не поддерживается).
Таким образом, эти 2 запроса возвращают []:
// 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', 'des c'), я получил результаты, но все еще не то, что я ищу:
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"
}