2 回答

TA貢獻1830條經(jīng)驗 獲得超9個贊
在 firebase 支持團隊的幫助下,我們發(fā)現(xiàn) python 客戶端 api 確實存在錯誤。下一個版本中有一個錯誤修正。很可能它將使 python 庫能夠按 documentid 排序,因此使用start_after()
.
到那時你有兩種可能的解決方案:
使用另一個字段進行排序和使用
start_after()
將 node.js 庫與分頁一起使用,例如:
var db = admin.firestore();
admin.firestore().settings({ timestampsInSnapshots: true });
function readNextPage(lastReadDoc) {
let query = db
.collection(collection)
.orderBy(admin.firestore.FieldPath.documentId())
.limit(100);
}

TA貢獻1853條經(jīng)驗 獲得超9個贊
在我的例子中,我在獲取整個集合時遇到了這個錯誤。它甚至不是那么大的集合,但我猜集合中的文件很大。我做了分頁更新。這是一個節(jié)點 firebase 函數(shù):
let lastReadDoc = false;
let lastDoc: string = '';
const limitRecordCount = 10;
do {
await db
.collection('something/' + somethingId + '/somethingcollection')
.orderBy('id')
.limit(limitRecordCount)
.startAfter(lastDoc)
.get()
.then((snapshot: any) => {
let counter = 0;
snapshot.docs.forEach((doc: any) => {
const docData = doc.data();
if (lastDoc !== docData.id) {
lastDoc = docData.id;
counter = counter + 1;
}
// ***********************
// business logic per doc here
// ***********************
});
if (counter < limitRecordCount) {
lastReadDoc = true;
}
})
.catch((err: any) => {
lastReadDoc = true;
console.log('Error getting booking documents', err);
});
} while (lastReadDoc === false);
- 2 回答
- 0 關注
- 207 瀏覽
添加回答
舉報