Firebase Firestore - 使用 where 子句按时间戳排序集合

Firebase Firestore - order collection by timestamp with where clause

我正在尝试按时间戳(日期字段的类型在 Firetore 中是时间戳)对集合数据进行排序,如下所示:

postsSnap = await _firebaseFirestore
        .collection(Paths.posts)
        .where('review', isNotEqualTo: '')
        .orderBy('review')
        .where('content', isEqualTo: contentRef)
        .orderBy('date', descending: true)
        .limit(limit)
        .get();

但是当我打印文档日期值时,看起来好像没有按日期排序的字段。结果如下:

flutter: 2020-08-25 13:45:01.552
flutter: 2021-03-30 09:19:52.138
flutter: 2020-06-27 00:18:44.615
flutter: 2020-07-01 04:57:53.645
flutter: 2021-03-25 14:06:30.692
flutter: 2020-05-28 11:49:07.180
flutter: 2020-05-30 22:02:54.650
flutter: 2021-06-08 02:41:28.650
flutter: 2020-05-31 08:49:35.456
flutter: 2020-05-31 06:38:25.894

同时创建了索引:

我想知道在查询中使用 where 子句时是否遗漏了什么。

先将时间戳字段保存为Unix时间戳,然后排序

您可以将日期时间转换为时间戳,如

var timestamp =  DateTime.now().millisecondsSinceEpoch

并且从时间戳到日期时间为

var dateTime = DateTime.fromMillisecondsSinceEpoch(timestamp * 1000);

当你打电话时:

.orderBy('review')

表示您按照review字段对结果进行升序排序。当您添加对以下内容的额外调用时:

.orderBy('date', descending: true)

表示只有当两个或多个评论相同时,您才date 订购以上结果。因此,您拥有的最佳选择是通过调用删除第一个 orderBy 并在客户端上进行第一个排序。