使用geofirestore添加,设置和更新文档

时间:2019-03-07 19:22:14

标签: reactjs react-native google-cloud-firestore geospatial geofirestore

我正在尝试使用带有响应本机的geofirestore https://geofirestore.com/,事实是我已经实现了在firestore中添加元素的方法,但是我已经阅读了文档,其中数据必须由geofirestore添加方法。我必须更改所有方法并使用firestore方法吗?我使用的是javascript而不是typeScript,我看到有一些带有typescript的示例,并且似乎它们已经更新了库,而其他示例却无法正常工作。 如何在bbdd中添加元素? 我使用了geofirex,它非常简单,但是没有限制,我想更改为geofirestore才能使用此功能。 谢谢!

2 个答案:

答案 0 :(得分:2)

因此,即使不是全部,大多数Typescript示例几乎都与JS(以及常规firebase库)中的示例几乎相同。让我给你一个在react-native-firebase中添加和查询(有限制)的示例。

import firebase from 'react-native-firebase';

const doc = {
   coordinates: new firebase.firestore.GeoPoint(0, 0),
   name: 'The center of the WORLD'
};

const collection = firebase.firestore().collection('todos');

collection.add(doc).then((docRef) => {
   collection.limit(100).get().then((querySnapshot) => {
      // 100 items in query
      querySnapshot.docChanges.forEach((change) => {
         console.log(change.doc);
      });
   });
});

现在,我从未使用过RNF,但是从文档中我可以得知这是正确的,并且它们所做的一切几乎与JS Firebase库相同(除了docChanges作为数组而不是函数返回)返回一个数组...)。无论如何,让我们在Geofirestore中看到同一件事,并具有使用limitnear位置查询的附加好处!

import firebase from 'react-native-firebase';
import { GeoFirestore } from 'geofirestore';

const doc = {
   coordinates: new firebase.firestore.GeoPoint(0, 0),
   name: 'The center of the WORLD'
};

const geofirestore = new GeoFirestore(firebase.firestore());
const geocollection = geofirestore.collection('todos');

geocollection.add(doc).then((docRef) => {
   geocollection.limit(100).near({
      center: new firebase.firestore.GeoPoint(0, 0),
      radius: 10
   }).get().then((querySnapshot) => {
      // 100 items in query within 10 KM of coordinates 0, 0
      querySnapshot.docChanges().forEach((change) => {
         console.log(change.doc);
      });
   });
});

无论如何,如果您只剥离: GeoFirestore或任何有效的JS ...,请不要担心Typescript代码示例。

// This in TS
const firestore = firebase.firestore();
const geofirestore: GeoFirestore = new GeoFirestore(firestore);

// Is this in JS
const firestore = firebase.firestore();
const geofirestore = new GeoFirestore(firestore);

最后,如果有帮助,我尝试使此viewers app与Vanilla JS保持最新。

答案 1 :(得分:0)

这很好用

  

等待eventRef.update({'d.arrUsers':   firebase.firestore.FieldValue.arrayUnion(userUid)});

但是我无法完成这项工作,它是一张地图,我想添加另一个用户,然后才能正常工作...

  

等待eventRef.set({'d.userMap':{                                       [userUid]:{                                           名称:名称,                                           年龄:                                       }                                   }},{合并:true});

如果我使用update,它将删除存在的一个,并放入新的,如果这样做,它将把它从文档中的d中取出