我有两种不同的方式可以浏览数据库并更新每个文档。 就是这个:
Firestore db = FirestoreClient.getFirestore();
//get all documents where expiresOn is already passed
ApiFuture<QuerySnapshot> future = db.collection("devices").whereLessThan("expiresOn", new Date()).get();
List<QueryDocumentSnapshot> documents = future.get().getDocuments();
for (DocumentSnapshot document : documents){
logger.info(document.getId() + " => " + document.getData().toString());
HashMap<String, Object> data = new HashMap<>();
data.put("expiresOn", null);
data.put("boughtUses", 0);
document.getReference().update(data);
}
或者这个:
ApiFuture<String> transaction = db.runTransaction(
new Transaction.Function<String>() {
@Override
public String updateCallback(Transaction transaction) throws Exception {
ApiFuture<QuerySnapshot> future = transaction.get(db.collection("devices").whereLessThan("expiresOn", new Date()));
List<QueryDocumentSnapshot> documents = future.get().getDocuments();
for (DocumentSnapshot document : documents){
HashMap<String, Object> data = new HashMap<>();
data.put("expiresOn", null);
data.put("boughtUses", 0);
transaction.update(document.getReference(), data);
}
return null;
}
}
);
logger.info(transaction.get());
在第一个中,我调用DocumentReference.update(),在第二个中,我调用Transaction.update()。我知道DocumentReference.update()被一个接一个地调用,但是Transaction.update()呢?是也要一一调用,还是将所有写入分组在一起?此外,如果确实将它们分组,是否算作我的使用次数较少的写操作?
答案 0 :(得分:0)
我知道DocumentReference.update()一一被调用
是的。
这是否还会被一个一个地调用,还是将所有写入分组在一起?
也将被一一称为。
如果将它们分组,是否算作我使用量较少的写信?
如果认为这些写操作将被分组在一起,并且只对一次写操作收取费用,则不会,对于您要更新的每个文档,您将一一收取费用。