#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()