Я разрешаю импорт данных, что дает мне большое количество документов для записи в firestore. Я держу счетчик документов, поэтому я должен замедлить запись.
// process 75 contacts every 1200ms
return new Promise<boolean>(async (resolve, reject) => {
timer(0, 1200)
.pipe(
takeWhile((_) => !!contacts.length),
)
.subscribe(async () => {
const next = contacts.splice(0, 75);
await updateContacts(userId, next);
});
});
Обновление контакта работает следующим образом: -
// It updates three documents: Basic, Extended and the User doc
// which has the count
export async function updateContacts(userId: string, contacts: Contact[]) {
const firestore = admin.firestore();
const batch = firestore.batch();
const userRef = getUserRef(userId);
for (const contact of contacts) {
const basicRef = getBasicContactRef(userId);
const extendedRef = getDetailContactRef(userId, basicRef.id);
const basic = contact.getBasic();
batch.set(basicRef, {
...basic,
...{ timestamp: FieldValue.serverTimestamp() },
});
const extended = contact.getExtended();
batch.set(extendedRef, {
...extended,
...{ timestamp: FieldValue.serverTimestamp() },
});
}
// Now update the count
batch.update(userRef, {
numberOfContacts: FieldValue.increment(contacts.length),
});
// commit it all
return batch.commit();
}
Однако, когда я запускаю его с большим количеством контактов, происходит сбой со следующим: -
Ошибка: 3 INVALID_ARGUMENT: разрешено максимум 500 записей на один запрос
Я думал, что я выполняю менее 500 записей на запрос!
Я действительно чешу голову, пытаясь выяснить. Я не слишком умен, поэтому прошу вас мудрых людей. Есть идеи, что я делаю не так?