2017-04-23 101 views
2

對不起,我對Firebase Cloud Func中的查詢geofire及其各自的key_enter和key_exited有疑問,以便維護我附近的地理點列表位置?,從幾十萬提取。考慮到所有這些情況發生在用戶在節點Firebase實時數據庫中更新它的地理位置時,並且這個數十萬的列表在用戶的位置附近被減少到幾個Firebase雲端功能中的Geofire查詢

+0

鑑於Geofire是一個基於Firebase JavaScript SDK構建的庫,它可以以相同的方式訪問Firebase數據庫。寫入數據庫是完全一樣的。但聽衆會以不同的方式工作。如果您遇到困難,我建議您嘗試一下,然後回覆。 –

回答

0

以下是我用於與GeoFire

exports.testLocation = functions.database.ref('/tests/{test}').onWrite(event => { 
    let data = event.data.val(); 
    console.log(data); 
    console.log(event.params.test); 
    if (data.location && data.location.coords) { 
     console.log('Update GeoFire'); 
     geoBase = new geoBase(event.data.adminRef.parent.parent.child('/GeoFireTests')); 
     geoBase.addLocation(event.params.test, [data.location.coords.latitude, data.location.coords.longitude]); 
    } 
}); 

GeoFire

let GeoFire = require('geofire'); 
module.exports = function(ref) { 
    this.geoFire = new GeoFire(ref); 
    this.addLocation = (key, location) => { 
     this.geoFire.set(key, location).then(() => { 
      console.log('Update succesfull'); 
     }).catch(error => { 
      console.log(error); 
     }); 
    } 
} 
+0

嗨,喬納斯,你能解釋一下你的答案的第二部分是什麼 –

+1

對不起,第二部分是一個單獨的模塊,導入到第一部分。它在這裏使用:geoBase = new geoBase()。 –

0

這是它會是什麼樣子,而不模塊

更新
let functions = require('firebase-functions'); 

let GeoFire = require('geofire'); 

exports.testLocation = functions.database.ref('/items/{item}').onWrite(event => { 
    let data = event.data.val(); 
    console.log(data); 
    console.log(event.params.item); 

    if (data.location && data.location.coords) { 

     console.log('Update GeoFire'); 

     let ref = event.data.adminRef.parent.parent.child('/items_locations')); 

     let key = event.params.test; 
     let location = [data.location.coords.latitude, data.location.coords.longitude]); 
     let geoFire = new GeoFire(ref); 

     geoFire.set(key, location).then(() => { 
     console.log('Update succesfull'); 
    }).catch(error => { 
     console.log(error); 
    }); 

    } 
}