У меня есть основная коллекция в firestore с парой сотен документов (которые вырастут до нескольких тысяч за пару месяцев).
У меня есть сценарий использования, когда каждый раз новый пользовательский документ Созданный в / users / collection, я хочу, чтобы все документы из мастера были скопированы в /users/ndomuserId‹/.
. Для этого я создал облачную функцию Firebase, как показано ниже:
// setup for new user
exports.setupCollectionForUser = functions.firestore
.document('users/{userId}')
.onCreate((snap, context) => {
const userId = context.params.userId;
db.collection('master').get().then(snapshot => {
if (snapshot.empty) {
console.log('no docs found');
return;
}
snapshot.forEach(function(doc) {
return db.collection('users').doc(userId).collection('slave').doc(doc.get('uid')).set(doc.data());
});
});
});
Это работает, единственная проблема в том, что это займет вечность (~ 3-5 минут) только для примерно 200 документов. Это был такой облом, потому что многое зависит от того, как быстро копируются эти документы. Я надеялся, что это будет максимум несколько секунд. Кроме того, документы отображаются полностью, а не так, как они написаны, или, по крайней мере, они так выглядят.
Я что-то не так делаю? Почему это занимает так много времени?
Есть ли способ, которым я могу разбить эту операцию на несколько операций чтения и записи, чтобы я мог гарантировать минимум документов за несколько секунд и не ждать, пока все они будут скопированы?
Пожалуйста, сообщите.