2017-10-17 15 views
1

firestoreでバッチ処理を実行したい。私は最後のキーを他のコレクションに保存しています。 最後のキーを取得してから1ずつ増やし、次にこのキーを使用して2つのドキュメントを作成する必要があります。これどうやってするの?バッチを使用してFirestoreからデータを取得する方法は?

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') }) 

答えて

3

1回の操作でデータを読み書きする場合は、トランザクションを使用する必要があります。

// 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

+0

しかし1回の警告で - 私は将来変更を願っ現在オフラインサポートされていないトランザクションを、:) –

関連する問題