Как создать экземпляр метки времени и геопункта в эмуляторе Firebase из консоли браузера

#javascript #firebase #google-cloud-firestore

#javascript #firebase #google-облако-firestore

Вопрос:

Я создал макет данных и выполнил пакетное обновление firestore.batch() . Проблема в том, что местоположение сохраняется как a number , а время как a string , а не как экземпляры Geopoint и Timestamp соответственно, что приводит к сбою моего приложения React.

Я мог видеть, что firestore доступно только через window.firestore , но не Firebase. Поскольку Firebase не экспортируется как window.firebase , я не могу создать экземпляр Geopoint или Timestamp.

Итак, как создать экземпляр Timestamp и Geopoint в эмуляторе Firebase из консоли браузера?

Вот тип doc , который я добавляю в firestore

 const doc = {
  "company": "company-1",
  "location": [
    -72.3623, // number
    79.5748   // but, want to convert to Geopoint instance
  ],
  "time": "Fri Sep 10 1976 07:42:23 GMT 0530 (India Standard Time)",      // string
  "createdAt": "Mon Apr 28 2014 13:30:16 GMT 0530 (India Standard Time)", // want to convert to Timestamp
}

 

Ответ №1:

Более надежный путь доступа, чем .Gf :

new firestore.app.firebase_.firestore.GeoPoint(lat, lng)

Ответ №2:

Есть firebase доступ через window.firestore .

Итак, я нашел способ создать экземпляр Geopoint и Timestamp через Firestore.

Вы можете получить к нему доступ через window.firestore.Gf.firebase_ , с помощью которого вы можете создать оба экземпляра.

 const raw = // pasting from clipboard
const batch = firestore.batch()
const firebase = firestore.Gf.firebase_

const Timestamp = firebase.firestore.FieldValue().Timestamp
const GeoPoint = firebase.firestore.FieldValue().GeoPoint

raw.forEach(doc => {
  const docRef = firestore
    .collection('user')
    .doc('user-1')
    .collection('interviews')
    .doc()
  
  doc = {
    ...doc,
    time: Timestamp.fromDate(new Date(doc.time)),
    createdAt: Timestamp.fromDate(new Date(doc.createdAt)),
    location: new GeoPoint(doc.location[0], doc.location[1])
  }
  
  batch.set(docRef, doc)
})

batch.commit()