Flutter FireStore,用当前时间加上 5 分钟更新时间戳

Flutter FireStore, Update TimeStamp with current time plus 5 minutes

我正在将数据写入 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 分钟来更新时间戳,但不知道该怎么做

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 替换为文档 ID I 时,它无法插入到 .doc(listId) 中在 Firestore DB .doc('idCopiedFromFireBaseConsole'), 中看到然后我可以用当前时间时间戳更新时间戳,但我仍然不知道如何获取文档 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 分钟

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

应该是这样的:

collection
    .doc(listId)
    .update(timeStamp: Timestamp(Timestamp.now(). millisecondsSinceEpoch + 5*60*1000);

Timestamp.now(). millisecondsSinceEpoch 为您提供当前时间(以毫秒为单位),然后我们将其加上 5 分钟(以毫秒为单位),并将组合值转换回 Timestamp

你能试试吗:

collection
    .doc(listId) // <-- Doc ID where data should be updated.
    .update(timeStamp: Timestamp.fromDate(DateTime.now().add(const Duration(minutes: 5))));