Firestore 문서에 타임스탬프 추가
저는 파이어스토어 신입사원입니다.소방서 문서에 따르면...
중요:Firebase Realtime Database의 "Push ID"와 달리 Cloud Firestore 자동 생성 ID는 자동 주문을 제공하지 않습니다.작성 날짜별로 문서를 정렬하려면 타임스탬프를 문서의 필드로 저장해야 합니다.
참조: https://firebase.google.com/docs/firestore/manage-data/add-data
키 을 키이름다같생이합니성까야해음과을?▁key합▁name니까▁as▁so▁create▁to로 만들어야 하나요?timestamp
서류상으로는?또는created
Firestore 문서의 위 설명을 충족하면 충분합니다.
{
"created": 1534183990,
"modified": 1534183990,
"timestamp":1534183990
}
firebase.firestore.FieldValue.serverTimestamp()
당신이 뭐라고 부르든 간에 페이크는 괜찮습니다.그러면 orderByChild('created')를 사용할 수 있습니다.
저도 주로 firebase.database를 사용합니다.서버 값.시간 설정 시 TIMESTAMP
ref.child(key).set({
id: itemId,
content: itemContent,
user: uid,
created: firebase.database.ServerValue.TIMESTAMP
})
class, Firestore Timestamp를 합니다.firebase.firestore.Timestamp.now()
.
때부터firebase.firestore.FieldValue.serverTimestamp()
에서 .add
소방서에서 온 방법입니다.참조
파이어스토어용
ref.doc(key).set({
created: firebase.firestore.FieldValue.serverTimestamp()
})
파이어스토어를 이용한 실시간 서버 타임스탬프
import firebase from "firebase/app";
const someFunctionToUploadProduct = () => {
firebase.firestore().collection("products").add({
name: name,
price : price,
color : color,
weight :weight,
size : size,
createdAt : firebase.firestore.FieldValue.serverTimestamp()
})
.then(function(docRef) {
console.log("Document written with ID: ", docRef.id);
})
.catch(function(error) {
console.error("Error adding document: ", error);
});
}
당신이 필요한 것은 'firebase'를 가져온 다음 firebase를 호출하기만 하면 됩니다.소방서FieldValue.serverTimestamp()는 필요한 위치에 있습니다.그러나 "serverTimestamp()"라는 철자는 주의해야 합니다.이 예에서는 Firestore의 제품 컬렉션에 업로드할 때 'createdAt'에 타임스탬프 값을 제공합니다.
맞습니다. 대부분의 데이터베이스와 마찬가지로 Firestore도 생성 시간을 저장하지 않습니다.시간별로 객체를 정렬하려면:
옵션 1: 클라이언트에 타임스탬프 생성(정확성이 보장되지 않음):
db.collection("messages").doc().set({
....
createdAt: firebase.firestore.Timestamp.now()
})
여기서 가장 큰 경고는Timestamp.now()
로컬 시스템 시간을 사용합니다.따라서 클라이언트 컴퓨터에서 실행되는 경우 타임스탬프가 정확하다는 보장은 없습니다.서버에서 설정하는 경우 또는 보장된 순서가 중요하지 않은 경우에는 문제가 없을 수 있습니다.
옵션 2: 타임스탬프 센티널을 사용합니다.
db.collection("messages").doc().set({
....
createdAt: firebase.firestore.FieldValue.serverTimestamp()
})
타임스탬프 센티넬은 파이어스토어 서버에 첫 번째 쓰기 시 타임 서버 측을 설정하도록 알리는 토큰입니다.
Sentinel이 작성되기 전에(예: 청취자에서) 읽었을 경우 다음과 같이 문서를 읽지 않으면 NULL이 됩니다.
doc.data({ serverTimestamps: 'estimate' })
다음과 같은 방법으로 쿼리를 설정합니다.
// quick and dirty way, but uses local machine time
const midnight = new Date(firebase.firestore.Timestamp.now().toDate().setHours(0, 0, 0, 0));
const todaysMessages = firebase
.firestore()
.collection(`users/${user.id}/messages`)
.orderBy('createdAt', 'desc')
.where('createdAt', '>=', midnight);
로 이 로컬 시스템 을 사용합니다.Timestamp.now()
). 하다면 Firebase의 Database이할 수
const serverTimeOffset = (await firebase.database().ref('/.info/serverTimeOffset').once('value')).val();
const midnightServerMilliseconds = new Date(serverTimeOffset + Date.now()).setHours(0, 0, 0, 0);
const midnightServer = new Date(midnightServerMilliseconds);
문서에 필드 이름이 나와 있지 않습니다.당신이 인용하는 부분은 단지 두 가지를 말하고 있는 것입니다.
- Firestore에 대해 자동으로 생성된 문서 ID는 Realtime Database에서와 같은 자연스러운 시간 기반 순서를 가지고 있지 않습니다.
- 시간 기반 순서를 지정하려면 문서에 타임스탬프를 저장한 후 쿼리 순서를 지정하는 데 사용합니다.(원하는 대로 부르셔도 됩니다.)
이 솔루션은 저에게 효과가 있었습니다.
Firestore.instance.collection("collectionName").add({'created': Timestamp.now()});
클라우드 Firestore의 결과: 클라우드 Firestore 결과
Swift 4 Timestamp(날짜: Date())에 대해 이것을 사용해 보십시오.
let docData: [String: Any] = [
"stringExample": "Hello world!",
"booleanExample": true,
"numberExample": 3.14159265,
"dateExample": Timestamp(Date()),
"arrayExample": [5, true, "hello"],
"nullExample": NSNull(),
"objectExample": [
"a": 5,
"b": [
"nested": "foo"
]
]
]
db.collection("data").document("one").setData(docData) { err in
if let err = err {
print("Error writing document: \(err)")
} else {
print("Document successfully written!")
}
}
저와 함께 작동하는 방법은 스냅샷 매개 변수 snapshot.update에서 타임스탬프를 가져오는 것입니다.시간
exports.newUserCreated = functions.firestore.document('users/{userId}').onCreate(async (snapshot, context) => {
console.log('started! v1.7');
const userID = context.params['userId'];
firestore.collection(`users/${userID}/lists`).add({
'created_time': snapshot.updateTime,
'name':'Products I ♥',
}).then(documentReference => {
console.log("initial public list created");
return null;
}).catch(error => {
console.error('Error creating initial list', error);
process.exit(1);
});
});
문서에 따르면, "서버가 업데이트를 수신할 때 추적하는 서버 타임스탬프에 문서의 필드를 설정"할 수 있습니다.
예:
import { updateDoc, serverTimestamp } from "firebase/firestore";
const docRef = doc(db, 'objects', 'some-id');
// Update the timestamp field with the value from the server
const updateTimestamp = await updateDoc(docRef, {
timestamp: serverTimestamp() // this does the trick!
});
파이어베이스 9+를 위해 2시간 동안 구글링 후 나에게 도움이 된 것을 공유합니다.
import { serverTimestamp } from "firebase/firestore";
export const postData = ({ name, points }: any) => {
const scoresRef = collection(db, "scores");
return addDoc(scoresRef, {
name,
points
date: serverTimestamp(),
});
};
저는 파이어스토어를 사용하여 Python과 함께 Raspass PI의 데이터를 저장하고 있습니다.파이프라인은 다음과 같습니다.
라즈베리 PI (paho-mqtt를 이용한 파이썬) -> 구글 클라우드 IoT -> 구글 클라우드 펍/서브 -> 파이어베이스 기능 -> 파이어스토어
장치의 데이터가 Python Dictionary입니다.저는 그것을 JSON으로 변환합니다.문제는 paho-mqtt가 String으로만 데이터를 전송(게시)하고 내 데이터 필드 중 하나가 timestamp라는 것입니다.이 타임스탬프는 데이터가 최종적으로 데이터베이스에 저장되는 시기에 관계없이 측정이 수행된 시기를 정확하게 알려주기 때문에 장치에서 저장됩니다.
제가 JSON 구조를 보낼 때, Firestore는 제 필드 '타임 스탬프'를 String으로 저장합니다.이것은 편리하지 않습니다.그래서 여기 해결책이 있습니다.
저는 변환할 모멘트 라이브러리를 사용하여 Firestore에 쓰기 위해 Pub/Sub에 의해 트리거되는 Cloud Function에서 변환을 수행합니다.
참고: 다음을 사용하여 파이썬으로 타임스탬프를 가져옵니다.
currenttime = datetime.datetime.utcnow()
var moment = require('moment'); // require Moment
function toTimestamp(strDate){
return parsedTime = moment(strDate, "YYYY-MM-DD HH:mm:ss:SS");
}
exports.myFunctionPubSub = functions.pubsub.topic('my-topic-name').onPublish((message, context) => {
let parsedMessage = null;
try {
parsedMessage = message.json;
// Convert timestamp string to timestamp object
parsedMessage.date = toTimestamp(parsedMessage.date);
// Get the Device ID from the message. Useful when you have multiple IoT devices
deviceID = parsedMessage._deviceID;
let addDoc = db.collection('MyDevices')
.doc(deviceID)
.collection('DeviceData')
.add(parsedMessage)
.then ( (ref) => {
console.log('Added document ID: ', ref.id);
return null;
}).catch ( (error) => {
console.error('Failed to write database', error);
return null;
});
} catch (e) {
console.error('PubSub message was not JSON', e);
}
// // Expected return or a warning will be triggered in the Firebase Function logs.
return null;
});
파이어스톤 방법이 작동하지 않습니다.java.sql의 타임스탬프를 사용합니다.타임스탬프를 기록하고 문자열에 캐스트하지 않습니다.그런 다음 파이어스톤 형식을 올바르게 지정합니다.now()를 표시하는 예는 다음과 같습니다.
val timestamp = Timestamp(System.currentTimeMillis())
Firestore에서 시간을 저장하는 여러 가지 방법
firebaseAdmin.firestore.FieldValue.serverTimestamp()
될 때 됩니다.실제 타임스탬프는 문서가 Firestore에 기록될 때 계산됩니다.
저장하는 동안 다음과 같이 나타납니다.
firebaseAdmin.firestore.Timestamp.now()
방법.
저장하는 동안 다음과 같이 나타납니다.
두 가지 방법 모두 다음에 데이터를 가져올 때 Firestore Timestamp 개체를 반환합니다.
그래서 먼저 네이티브 js로 변환해야 합니다.Date
객체를 사용하면 다음과 같은 방법을 수행할 수 있습니다.toISOString()
.
export function FStimestampToDate(
timestamp:
| FirebaseFirestore.Timestamp
| FirebaseFirestore.FieldValue
): Date {
return (timestamp as FirebaseFirestore.Timestamp).toDate();
}
unix 타임스탬프로 저장
Date.now
번호로 저장됩니다.1627235565028
그러나 Firestore db에서는 읽을 수 있는 날짜로 볼 수 없습니다.
이 Firestore 필드에 대해 쿼리하려면 날짜를 타임스탬프로 변환한 다음 쿼리해야 합니다.다음으로 저장
new Date().toISOString()
예."2021-07-25T17:56:40.373Z"
그러나 날짜 범위 쿼리를 수행할 수 없습니다.
저는 두 번째 또는 세 번째 방법을 선호합니다.
버전 9에서는 다음 가져오기만 사용합니다.
import { Timestamp } from '@angular/fire/firestore'
코드는 다음과 같습니다.
ref.child(key).set({
id: itemId,
content: itemContent,
user: uid,
createdAt: Timestamp.fromDate(new Date())
})
스위프트 5.1
...
"dateExample": Timestamp(date: Date()),
...
파이어스토어의 최신 버전은 다음과 같이 사용해야 합니다.
import { doc, setDoc, Timestamp } from "firebase/firestore";
const docData = {
...
dateExample: Timestamp.fromDate(new Date("December 10, 1815"))
};
await setDoc(doc(db, "data", "one"), docData);
또는 중대한 타임스탬프의 경우
import { updateDoc, serverTimestamp } from "firebase/firestore";
const docRef = doc(db, 'objects', 'some-id');
const updateTimestamp = await updateDoc(docRef, {
timestamp: serverTimestamp()
});
언급URL : https://stackoverflow.com/questions/51846914/add-timestamp-in-firestore-documents
'programing' 카테고리의 다른 글
명령줄을 사용하여 Firebase 데이터베이스 보안 규칙을 배포하는 방법은 무엇입니까? (0) | 2023.06.10 |
---|---|
웹 API 인증 필터의 경우 내 클레임 ID가 항상 거짓인 이유는 무엇입니까? (0) | 2023.06.10 |
마우스 클릭 없이 Excel에서 하이퍼링크를 여는 방법, 바로 가기 키/키가 있습니까? (0) | 2023.06.10 |
ND에서 1D 어레이까지 (0) | 2023.06.10 |
-m 옵션을 사용한 Python 코드 실행 여부 (0) | 2023.06.10 |