добавлять, устанавливать, обновлять документ с помощью geofirestore

#reactjs #react-native #google-cloud-firestore #geospatial #geofirestore

#reactjs #react-native #google-облако-firestore #геопространственный #geofirestore

Вопрос:

Я пытаюсь использовать geofirestore https://geofirestore.com с помощью react native я уже реализовал методы добавления элементов в firestore, однако я прочитал в документации, что данные должны добавляться методами geofirestore. Должен ли я изменить все методы и использовать методы firestore? Я использую javascript, а не TypeScript, я вижу, что есть примеры с typescript, и кажется, что они обновили библиотеку, а другие примеры не работают. Как я мог бы добавить элементы в bbdd? Я использовал geofirex, и это было очень просто, но у него нет ограничений, я хочу перейти на geofirestore, чтобы иметь возможность использовать эту функцию. Спасибо!

Ответ №1:

таким образом, большинство, если не все, примеров 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 с дополнительным преимуществом запроса с limit и near местоположением!

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

В любом случае, не бойтесь примеров кода Typescript, если вы просто удалите : GeoFirestore или что-то еще, что является допустимым JS…

 // 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);
  

Наконец, я пытаюсь поддерживать это приложение для просмотра в актуальном состоянии с помощью Vanilla JS, если это помогает.

Комментарии:

1. Большое вам спасибо @MichaelSolati, я уже понимаю намного лучше. Проблема в том, что у меня уже был интерфейс, подключенный к firestore, и в документе была другая структура, теперь с g: g, l: l, d: d отличается, но все исправлено небольшой тяжелой работой… Вопрос, если я хочу изменить документ, удалить … Я также должен сделать это с помощью geofirestore или я могу с помощью методов обновления, установки, удаления firestore? набор примеров: ожидание firestore.set ( users / $ {user.uid} , {обновление: update}, {слияние: true}) Еще раз, большое вам спасибо за эту замечательную библиотеку 🙂

2. Вы могли бы обновить (в том числе удалить) документ напрямую без geofirestore, просто не забудьте добавить в сноски свои поля или объект с помощью d. . Однако, если вы обновляете местоположение / координаты, вы должны сделать это с помощью geofirestore.

3. Спасибо, я понимаю, как это работает, и постепенно внедряю это в свой проект… Не могли бы вы показать мне, как будет выполнен тот же запрос, но с включенным событием прослушивания? Как я уже сказал, я использую react-native с firebase, но подключен к web sdk, а не к библиотеке RNFirebase. Приветствую и еще раз благодарю

4. Библиотека RNF пытается быть репликацией web sdk в формате 1-2-1. Практически каждый класс и метод ведут себя одинаково.

Ответ №2:

Это работает отлично

ожидать eventRef.update({‘d.arrUsers’: firebase.firestore.Значение поля.arrayUnion(userUid)});

Однако я не могу заставить это работать, это карта, и я хочу добавить другого пользователя, прежде чем она заработает правильно…

ожидать eventRef.set({‘d.userMap’: { [userUid]: { имя: name, возраст: age } }}, {объединить: true});

Если я использую update, он удаляет существующий и помещает новый, если я это сделаю, он удалит его из общего доступа в документе

Комментарии:

1. Если вы используете geofirestore и обновляете / настраиваете геодокумент, вы не ставите d. перед объектом. Ооочень…. await eventRef.update({'arrUsers': firebase.firestore.FieldValue.arrayUnion(userUid)}); И await eventRef.set({ userMap: { [userUid]: { name: name, age: age } }}, {merge: true});