0

私は参照パス上に新しく追加された子ノードのトリガを取得し、新しいデータだけの値を取得しようとしています。しかし、event.data.valはその参照パスのすべての値を返します。続きfirebaseデータベースに新しく追加された子ノードのイベントを取得します

は、私が使用しています雲の機能コードです:

exports.sendOfferNotification = functions.database.ref('/Users/{uid}/offers/New').onWrite(event => { 
    // Only edit data when it is first created. 
     // if (event.data.previous.exists()) { 
     // return; 
     // } 
     // Exit when the data is deleted. 
     if (!event.data.exists()) { 
     return; 
     } 
     // Grab the current value of what was written to the Realtime Database. 
     const original = event.data.val(); 
     console.log('New offer', event.params.uid, original); 

}); 

私はonUpdate代わりのonWriteが、それでも同じ結果を使用してみました。

+0

onWrite()データベーストリガーは、その場所の下にあるものが変更されたときは常に、ref()で指定した場所のすべてのデータを受け取ります。 –

+0

ええと、私は同意しますが、onUpdate()も同じように動作します。新しく追加されたデータだけをどうやって得ることができるのか?たとえば、/ Newの下に既に4つのオファーがあり、5つ目のオファーが追加された場合は、5番目のデータを取得するだけです –

答えて

0

は最初の新/

exports.sendNotificationForImportantOffers = functions.database.ref('/Users/{uid}/offers/New/Important/{values}').onCreate(event => { 
    // Only edit data when it is first created. 
     // if (event.data.previous.exists()) { 
     // return; 
     // } 
     // Exit when the data is deleted. 
     if (!event.data.exists()) { 
     return; 
     } 
     // Grab the current value of what was written to the Realtime Database. 
     const original = event.data.val(); 
     console.log('New offer', event.params.uid, original); 

}); 

のネストされたレベルにonCreate()を使用して、それを解決、私はを聞くために1つの機能を持ってしようとしていましたNew/pathの下にあるすべてのネストされたレベルで変更されますが、私は新たに追加された子のみを返すonCreate()を使って、それぞれのサブレベルのトリガーを個別に監視する必要があります。

2

データベースを共有できますか?それは多分あなたはこれを試すことができ、私が思うに動作するはずです:

exports.sendOfferNotification = 
functions.database.ref('/Users/{uid}/offers/New/{values}') //notice this change 
.onWrite(event => { 
     if (!event.data.exists()){return}; 
     const original = event.params.values; //notice this change 
     console.log('New offer', event.params.uid, original); 
}); 
+0

{values}のアプローチは役に立ちましたが、さらに1つのサブレイヤがあり、onCreate )の代わりにonWrite()を使用します。だから、私は下に私の答えを掲載しました。 –

関連する問題