我正在处理 Cloud Firestore 事务,并试图了解 Firestore(服务器客户端库)如何处理涉及查询的事务。具体来说,当事务执行查询而不是直接获取单个文档时的“锁定”行为。
事务是否锁定从中进行查询的整个集合(或集合组),还是仅锁定查询返回的特定文档?
示例(NodeJs):
const db = admin.firestore();
const fireQuery = db.collectionGroup('my-collection')
.where('role', '==', 'user');
await db.runTransaction(async transaction => {
// Query documents and lock them while performing the update.
const querySnap = await transaction.get(fireQuery);
// Perform write operations on the retrieved documents...
}
如果只锁定查询返回的文档,考虑到查询结果可能在执行查询之前才知道,Firestore 如何确定提前锁定哪些文档?
事务是否锁定从中进行查询的整个集合(或集合组)
没有。
还是只锁定查询返回的特定文档?
是的。 您应该注意,参与单个批次或事务的文档数量限制为 500 个。 如果查询返回的值超过这个值,将会导致错误。