【发布时间】:2022-01-16 02:04:22
【问题描述】:
我正在将数据写入 Firestore DB,我成功写入,然后根据时间戳顺序读取它。
现在我想用当前时间加上 5 分钟来更新某些 listId 的时间戳,但无法弄清楚,正在在线检查,但我能找到的示例仅适用于 dart 以外的其他语言,并且无法想不通。
写入数据
Future<void> addSentences(String listId) {
final Sentences = FirebaseFirestore.instance.collection('Sentences');
return Sentences.add({
'listId': listId,
'timeStamp': Timestamp.now(),
});
}
获取最旧的listId
void getOldestListId() async {
await for (var messages
in FirebaseFirestore.instance.collection("Sentences").orderBy("timeStamp").limit(1).snapshots()) {
for (var message in messages.docs.toList()) {
print(message.data());
Map we = message.data();
print(we['listId']);
}
}
}
试图用 TimeStamp.now() 加上 5 分钟来更新 timeStamp,但不知道该怎么做
void update() async {
var collection = FirebaseFirestore.instance.collection('sentences');
collection
.doc(listId) // <-- Doc ID where data should be updated.
.update(timeStamp: Timestamp.now() + minutes(5));
}
编辑
请注意,listId 是我保存到 Firestore 数据库而不是文档 ID 的值,因此当我将 listId 替换为我在 Firestore DB .doc('idCopiedFromFireBaseConsole'), 中看到的文档 ID 时,它无法插入到 .doc(listId) 中我可以用当前时间时间戳更新时间戳,但我仍然不知道如何获取文档 ID,我想我应该在 getOldestListId() 函数中获取文档 ID,我怎样才能在那里获得正确的 ID?
void getOldestListId() async {
await for (var messages
in FirebaseFirestore.instance.collection("Sentences").orderBy("timeStamp").limit(1).snapshots()) {
for (var message in messages.docs.toList()) {
print(message.data());
Map we = message.data();
print(we['listId']);
}
}
}
这就是我可以用当前时间 + 5 分钟更新 timeStamp 的方法
void update() async {
var collection = FirebaseFirestore.instance.collection('sentences'); collection.doc('idCopiedFromFireBaseConsole').update({'timeStamp': DateTime.now().add(const Duration(minutes: 5))});
编辑 现在它可以像我预期的那样工作,为其他有类似问题的人发布代码
向 FireStore 添加数据的功能
Future<void> addSentences(String sentenceId) {
final sentences = FirebaseFirestore.instance.collection('sentences');
return sentences.add({
'sentenceId': sentenceId,
'timeStamp': Timestamp.now(),
});
}
addSentences() 用于向 Firestore DB 添加数据的循环
for (int i = 0; i <= 3; i++) {
//_sentenceList.length
addChineseSentences(i.toString());
}
获取最旧的sentenceId的函数
late String _docId;
void getOldestSentence() async {
await for (var messages
in FirebaseFirestore.instance.collection("sentences").orderBy("timeStamp").limit(1).snapshots()) {
for (var message in messages.docs.toList()) {
_docId = message.id;
print(_docId);
Map we = message.data();
print(we['listId']);
}
}
}
更新句子时间戳的功能
void updateSentence() async {
var collection = FirebaseFirestore.instance.collection('sentences');
collection.doc(_docId) // <-- Doc ID where data should be updated.
.update({'timeStamp': Timestamp.fromDate(DateTime.now().add(const Duration(minutes: 5)))});
}
【问题讨论】:
标签: flutter google-cloud-firestore timestamp