我正在尝试在集合中更新,那里有1400多个办公室,在检查并运行查询后,我正在集合文档中更新,并在查询后在子集合中更新一些详细信息,但有时我会收到此错误10中止:对这些文件的争论太多了。请再试一次。我只是在文档中使用批处理进行编写,这是我在集合中更新的代码。
batch.set(
rootCollections.x.doc(getISO8601Date())
.collection(subCollection.y)
.doc(change.after.get('Id')),
{
officeId: change.after.get('Id'),
office: change.after.get('office'),
status: change.after.get('status'),
creationTimestamp:
change.after.get('creationTimestamp') ||
change.after.get('createTimestamp') ||
change.after.get('timestamp'),
activeUsers: [...new Set(phoneNumbers)].length,
confirmedUers: activityCheckinSubscription.docs.length,
uniqueActivities: [...new Set(activities)].length,
payments: 0,
contact: [
`${change.after.data().creator.phoneNumber},${
change.after.data().attachment['First Contact'].value
}`,
],
},
{ merge: true },
);
batch.set(
rootCollections.x.doc(getISO8601Date()),
{
Added: admin.firestore.FieldValue.increment(1),
},
{ merge: true },
);
PromiseArray.push(batch.commit());
await Promise.all(PromiseArray);
在这里的类似案例中,您似乎面临着同样的问题,数据库中有数千条记录正在更新。正如上面所阐明的,一秒钟内可以在文档中执行多少写入操作是有限制的——这里有更多详细信息——尽管Firestore有时可能会坚持更快的写入,但它在某个时候会失败
由于这是硬编码的,并且是Firestore强加的限制,您可以尝试在这里的类似案例中解释的解决方案,即要么更改为实时数据库,其中限制不是写入次数,而是数据的大小,要么在Firestore中使用计数器或其他数据聚合的情况下,使用分布式计数器解决方案,你可以在这里获得更多细节。
总之,除非用这个解决方案来解决问题,否则你无能为力,因为这是Firestore的一个限制。