【发布时间】:2021-11-24 19:42:20
【问题描述】:
我正在尝试从我的 firestore 数据库中查询一组 5 条记录。每次客户端成功查询 5 条记录时,文档上每条记录的视图字段都会递增 1。我基本上希望数据库中的所有记录在客户端都有相同的机会被看到,因此应该查询视图值最低的记录.但是,即使查询的记录现在具有更高的视图值,以下查询的行为仍不如预期,因为我一直获得相同的记录集。降序设置为 false 的 orderBy 不会对集合进行排序以首先列出最低值吗?
QuerySnapshot snapshot = await FirebaseFirestore.instance
.collection('records')
.where('city', isEqualTo: city)
.where('views', isGreaterThan: -1)
.orderBy('views', descending: false)
.limit(5)
.get();
snapshot.docs.forEach((element) async {
Record record =
Record.fromMap(element.data() as Map<String, dynamic>);
await FirebaseFirestore.instance
.collection('records')
.doc(record.recordID)
.update({'views': FieldValue.increment(1)});
}
}
第一次查询后的文档ID和查看日志:
- I/颤振(3630):e56a4c40-40e5-11ec-9a4b-b5164e53b334
- I/颤动(3630):4
- I/颤振(3630):ecd328c0-40e6-11ec-a76a-cd0a98374153
- I/颤动(3630):4
- I/颤振 (3630): dc894420-40e3-11ec-a113-2d0055afb86b
- I/颤动(3630):4
- I/颤振(3630):e3f554f0-40e4-11ec-a3ae-1f948418cef9
- I/颤动(3630):4
文档日志和查看第二个查询:
- I/颤振(3630):ecd328c0-40e6-11ec-a76a-cd0a98374153
- I/颤动(3630):5
- I/颤振(3630):e56a4c40-40e5-11ec-9a4b-b5164e53b334
- I/颤动(3630):5
- I/颤振 (3630): dc894420-40e3-11ec-a113-2d0055afb86b
- I/颤动(3630):5
- I/颤振(3630):e3f554f0-40e4-11ec-a3ae-1f948418cef9
- I/颤动(3630):5
【问题讨论】:
-
您的代码中没有任何内容会增加
views字段,因此很难说这是否正确。您能否将您的问题编辑为:1) 记录文档 ID 和每个结果的views字段值,2) 显示返回的文档之一的屏幕截图? -
嗨弗兰克,视图按预期增加。我发布了 Firestore 数据库的屏幕截图。
-
请在我的评论中加入#1。
-
已更新,不确定编辑是否是您要查找的内容。数据库中有视图值为 0、1 等的文档,但它们没有被查询。所有的城市字段都是相同的,所以这不是问题。
-
与 Firestore firebase.google.com/docs/firestore/query-data/… 中的复合查询无关?
标签: firebase flutter google-cloud-firestore