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 并在客户端上进行第一个排序。
我正在尝试按时间戳(日期字段的类型在 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 并在客户端上进行第一个排序。