我在 Firebase Firestore 中有相当多的数据,其 createDate 字段保存为 ISO 8601 字符串 (2024-05-15T18:08:30.825890)。之前我不需要执行任何日期比较,但现在这是我的应用程序的要求。问题是,当我在字段上执行日期比较时,例如
var usersSnapshot = await FirebaseFirestore.instance.collection("users").where('dateCreated', isGreaterThan: dateCreated).get()
我得到 0 个结果。我怀疑这是因为我的 firestore 中的字段是用字符串类型保存的,而不是时间戳类型。
我应该迁移所有数据并将字段类型从字符串更改为时间戳(这是一种非常侵入性的解决方案),还是我可以做其他事情才能使用现有数据运行上面的查询?
这个问题的解决方案很少。 第一个也是好的解决方案是将字符串迁移到时间戳
以下是迁移数据的方法:
import 'package:cloud_firestore/cloud_firestore.dart';
Future<void> migrateDateCreatedField() async {
CollectionReference usersRef = FirebaseFirestore.instance.collection('users');
QuerySnapshot snapshot = await usersRef.get();
for (QueryDocumentSnapshot doc in snapshot.docs) {
String? dateCreatedString = doc['dateCreated'];
if (dateCreatedString != null) {
DateTime dateCreated = DateTime.parse(dateCreatedString);
//or use doc refrence to update the document
await usersRef.doc(doc.id).update({'dateCreated': Timestamp.fromDate(dateCreated)});
}
}
}