Rau*_*aul 3 firebase google-cloud-firestore
我有一个关于多重orderBy工作原理的问题。
假设这些文件:
collection/
doc1/
date: yesterday at 11:00pm
number: 1
doc2/
date: today at 01:00am
number: 6
doc3/
date: today at 13:00pm
number: 0
Run Code Online (Sandbox Code Playgroud)
如果我按这样的两个字段排序:
collection/
doc1/
date: yesterday at 11:00pm
number: 1
doc2/
date: today at 01:00am
number: 6
doc3/
date: today at 13:00pm
number: 0
Run Code Online (Sandbox Code Playgroud)
这些文档是如何排序的?而且,反其道而行之又如何?
.orderBy("date", "desc")
.orderBy("number", "desc")
.get()
Run Code Online (Sandbox Code Playgroud)
这会产生相同的顺序吗?
我有点困惑,因为我不知道它是否总是会在最后订购orderBy。
Slo*_*ing 16
orderBy()在Firebase的文档中是这样说的:
您还可以按多个字段排序。例如,如果您想按州排序,并在每个州内按人口降序排列:
Query query = cities.orderBy("state").orderBy("population", Direction.DESCENDING);
Run Code Online (Sandbox Code Playgroud)
所以,基本上就是这样。使用来自 SQL 的逻辑,您可以使用 ORDER BY 来对表进行排序。假设您有一个来自世界各地的客户数据库。然后您就可以使用ORDER BY Country,并且可以按照您想要的任何顺序按国家/地区对它们进行排序。但是,如果您添加第二个参数,比如说Customer Name,那么它将首先按Country排序,然后在该排序列表中它将按Customer Name排序。例子:
1. Adam | USA |
2. Jake | Germany |
3. Anna | USA |
4. Semir | Croatia |
5. Hans | Germany |
Run Code Online (Sandbox Code Playgroud)
当你打电话时orderBy("country")你会得到这个:
1. Semir | Croatia |
2. Jake | Germany |
3. Hans | Germany |
4. Adam | USA |
5. Anna | USA |
Run Code Online (Sandbox Code Playgroud)
然后当你打电话时orderBy("customer name")你会得到这个:
1. Semir | Croatia |
2. Hans | Germany |
3. Jake | Germany |
4. Adam | USA |
5. Anna | USA |
Run Code Online (Sandbox Code Playgroud)
您可以看到 Hans 和 Jake 交换了位置,因为 H 在 J 之前,但它们仍然按国家/地区名称排序。在你的情况下,当你使用这个:
1. Adam | USA |
2. Jake | Germany |
3. Anna | USA |
4. Semir | Croatia |
5. Hans | Germany |
Run Code Online (Sandbox Code Playgroud)
它将首先按日期排序,然后按数字排序。但由于您没有相同的日期值,因此您不会注意到任何差异。这也适用于第二个。但假设您的其中一个字段具有相同的日期,因此您的数据如下所示:
collection/
doc1/
date: yesterday at 11:00pm
number: 1
doc2/
date: today at 01:00am
number: 6
doc3/
date: today at 01:00am
number: 0
Run Code Online (Sandbox Code Playgroud)
现在,doc2 和 doc3 的日期都为today at 01:00am。现在,当您按日期订购时,它们将是一个在另一个下面,可能 doc2 将首先显示。但是当您使用orderBy("number")then 时,它会检查同一日期内的数字。所以,如果它只是orderBy("number")没有“desc”,你会得到这个:
1. Semir | Croatia |
2. Jake | Germany |
3. Hans | Germany |
4. Adam | USA |
5. Anna | USA |
Run Code Online (Sandbox Code Playgroud)
1. Semir | Croatia |
2. Hans | Germany |
3. Jake | Germany |
4. Adam | USA |
5. Anna | USA |
Run Code Online (Sandbox Code Playgroud)
因为数字 0 在 6 之前。只需将其反转为desc即可。
| 归档时间: |
|
| 查看次数: |
10471 次 |
| 最近记录: |