Я хочу получить доступ к последним N документам из коллекции Google Firestore. Ключ для документов - метка времени в формате ISO. Сначала коллекция должна быть отсортирована по ключам отметок времени, а последние N обновленных документов должны быть извлечены. Эта операция должна быть в реальном времени и быстрой.
events(collection) =>
documents as below:
2019-01-07T08:21:18.600Z => {
symbolname: '10900CE',
price: '10825.0',
timestamp: '2019-01-07T13:51:18Z',
quantity: '2.0',
side: 'SELL' }
2019-01-07T08:21:28.614Z => {
symbolname: '10800PE',
price: '10825.0',
timestamp: '2019-01-07T13:51:28Z',
quantity: '2.0',
side: 'BUY' }
2019-01-07T09:45:24.783Z => { side: 'SELL',
symbolname: '10800PE',
price: '10805.0',
timestamp: '2019-01-07T15:15:24Z',
quantity: '2.0' }
В настоящее время я перебираю коллекцию и добавляю ключи в массив, а затем сортирую массив и получаю последний N документ по этим ключам следующим образом:
var ids = []
db.collection('events').get()
.then((snapshot) => {
snapshot.forEach((doc) => {
ids.push(doc.id)
});
})
.then(()=>{
//sortIds(ids);
console.log(JSON.stringify(ids[ids.length-2])) //second last entry 2019-01-07T08:21:28.614Z
})
.catch((err) => {
console.log('Error getting documents', err);
});
Эта операция занимает много времени, если размер коллекции увеличивается. Есть ли оптимальный способ достижения этого (сортировка / сортировка по убыванию и получение последних N документов)?
Спасибо