如何在使用批处理时从firestore获取数据?

时间:2017-10-17 12:44:15

标签: firebase google-cloud-firestore

我想在firestore中执行批处理事务。我将最后一个密钥存储在其他集合中。 我需要获取最后一个键然后再增加1,然后使用此键创建两个文档。我怎么能这样做?

 let lastDealKeyRef = this.db.collection('counters').doc('dealCounter')
 let dealsRef = this.db.collection('deals').doc(id)
 let lastDealKey = batch.get(lastDealKeyRef) // here is the problem..
 batch.set(dealsRef, dealData)
 let contentRef = this.db.collection('contents').doc('deal' + id)
 batch.set(contentRef, {'html': '<p>Hello World</p>' + lastDealKey })
 batch.commit().then(function () {
 console.log('done') })

1 个答案:

答案 0 :(得分:7)

如果您想在一次操作中读/写数据,您应该使用交易。

// Set up all references
let lastDealKeyRef = this.db.collection('counters').doc('dealCounter');
let dealsRef = this.db.collection('deals').doc(id);
let contentRef = this.db.collection('contents').doc('deal' + id);


// Begin a transaction
db.runTransaction(function(transaction) {
    // Get the data you want to read
    return transaction.get(lastDealKeyRef).then(function(lastDealDoc) {
      let lastDealData = lastDealDoc.data();

      // Set all data
      let setDeals = transaction.set(dealsRef, dealData);
      let setContent = transaction.set(contentRef,  {'html': '<p>Hello World</p>' + lastDealKey });

      // Return a promise
      return Promise.all([setDeals, setContent]);

    });
}).then(function() {
    console.log("Transaction success.");
}).catch(function(err) {
    console.error("Transaction failure: " + err);
});

您可以在此处详细了解交易和批次: https://firebase.google.com/docs/firestore/manage-data/transactions