作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望能够删除子集合中的所有文档作为 android 事务的一部分。我找到了以下代码,但这是针对 Node.js 的
// First perform the query
db.collection('job_skills').where('job_id','==',post.job_id).get()
.then(function(querySnapshot) {
// Once we get the results, begin a batch
var batch = db.batch();
querySnapshot.forEach(function(doc) {
// For each doc, add a delete operation to the batch
batch.delete(doc.ref);
});
// Commit the batch
return.batch.commit();
}).then(function() {
// Delete completed!
// ...
});
如有任何帮助,我们将不胜感激!
谢谢!
最佳答案
我在你的代码中看到的不是交易,而是批处理。所以如果你想使用Android SDK删除一个集合中的所有文档,我推荐你使用以下方法:
private void deleteCollection(final CollectionReference collection, Executor executor) {
Tasks.call(executor, new Callable<Object>() {
@Override
public Object call() throws Exception {
int batchSize = 10;
Query query = db.collection("job_skills").whereEqualTo("job_id", job_id);
List<DocumentSnapshot> deleted = deleteQueryBatch(query);
while (deleted.size() >= batchSize) {
DocumentSnapshot last = deleted.get(deleted.size() - 1);
query = collection.orderBy(FieldPath.documentId()).startAfter(last.getId()).limit(batchSize);
deleted = deleteQueryBatch(query);
}
return null;
}
});
}
这里是 deleteQueryBatch()
方法:
@WorkerThread
private List<DocumentSnapshot> deleteQueryBatch(final Query query) throws Exception {
QuerySnapshot querySnapshot = Tasks.await(query.get());
WriteBatch batch = query.getFirestore().batch();
for (DocumentSnapshot snapshot : querySnapshot) {
batch.delete(snapshot.getReference());
}
Tasks.await(batch.commit());
return querySnapshot.getDocuments();
}
即使 Firebase 团队不推荐删除操作,因为它对安全性和性能有负面影响,您仍然可以将其用于小型数据集。
关于android - 您如何在 firestore android 的事务中遍历子集合中的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50220287/
我是一名优秀的程序员,十分优秀!