Firebase云端功能中的Geofire查询

问题描述:

对不起,我对Firebase Cloud Func中的查询geofire及其各自的key_enter和key_exited有疑问,以便维护我附近的地理点列表位置?,从几十万提取。考虑到所有这些情况发生在用户在节点Firebase实时数据库中更新它的地理位置时,并且这个数十万的列表在用户的位置附近被减少到几个Firebase云端功能中的Geofire查询

+0

鉴于Geofire是一个基于Firebase JavaScript SDK构建的库,它可以以相同的方式访问Firebase数据库。写入数据库是完全一样的。但听众会以不同的方式工作。如果您遇到困难,我建议您尝试一下,然后回复。 –

以下是我用于与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()。 –

这是它会是什么样子,而不模块

更新
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); 
    }); 

    } 
}