如何在Firestore中的事务中包装删除查询?

时间:2018-01-03 04:33:34

标签: firebase google-cloud-firestore

例如,我可以从集合x中删除文档x,然后从集合y中删除文档y,但如果出现问题,则回滚所有内容。根据文档,DocumentationReference.delete()基本上是删除文档的唯一方法。

2 个答案:

答案 0 :(得分:4)

在事务中删除文档有Transaction.delete(DocumentReference) method

因此,以交易方式删除所有人口example in the documentation修改):

var citiesRef = db.collection("cities");

db.runTransaction(function(transaction) {
    var count = 0;
    return transaction.get(citiesRef).then(function(querySnapshot) {
        querySnapshot.forEach(function(doc) {
          if (doc.data().population <= 1000000) {
            transaction.delete(doc.ref);
            count = count + 1;
          }
        });
    });
}).then(function(count) {
    console.log("Deleted cities ", count);
}).catch(function(err) {
    console.error(err);
});

答案 1 :(得分:0)

我使用batch method,如:

let batch = db.batch()

batch.deleteDocument(documentXref)
batch.deleteDocument(documentYref)

batch.commit() { error in
    if let error = error {
        print(error.localizedDescription)
    }
}

请注意,即使离线也可以使用。因此,如果您希望在这种情况下操作失败,则应使用事务方法。