Firebase云端功能中的Geofire查询
问题描述:
对不起,我对Firebase Cloud Func中的查询geofire及其各自的key_enter和key_exited有疑问,以便维护我附近的地理点列表位置?,从几十万提取。考虑到所有这些情况发生在用户在节点Firebase实时数据库中更新它的地理位置时,并且这个数十万的列表在用户的位置附近被减少到几个Firebase云端功能中的Geofire查询
答
以下是我用于与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);
});
}
}
鉴于Geofire是一个基于Firebase JavaScript SDK构建的库,它可以以相同的方式访问Firebase数据库。写入数据库是完全一样的。但听众会以不同的方式工作。如果您遇到困难,我建议您尝试一下,然后回复。 –