我有一个名为name的集合,它有一些随机名称。我想按字母顺序显示姓名。
感谢
我认为您将文档ID称为";名称";。
如果你的数据看起来像这样:
{
"names": { // Collection
"Tom": { age: 42, country: "US" }, // Document
"sally": { age: 38, country: "AU" }, // Document
"richard": { age: 36, country: "UK" }, // Document
/* ... */
}
}
"tom"
、"richard"
和"sally"
是文档ID,而不是名称。为了将这些";名称";使用字典顺序,计算机理解的顺序&Firestore在二进制级别上,您可以使用:
val db = Firebase.firestore
db.collection("names")
.orderBy(FieldPath.documentId())
.get()
.addOnSuccessListener { documents ->
Log.d(TAG, "Found ${documents.size()} documents")
for (document in documents) {
Log.d(TAG, "> ${documents.getReference().getPath()}")
}
}
.addOnFailureListener { exception ->
Log.w(TAG, "Error getting documents: ", exception)
}
上述查询将返回/names/Tom
,然后返回/names/richard
,再返回/names/sally
。
这是因为词典的顺序与字母顺序不同。
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" // lexicographic order
"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" // alphabetical order
由于Firebase要求查询在一次传递中通过索引,除非您的文档ID都遵循相同的大小写样式,否则您将得到与预期不同的结果。为了克服这一点,在允许您对文档ID使用任何情况的同时,您应该在文档数据中存储一个新字段,该字段包含文档的小写ID。
{
"names": { // Collection
"Tom": { age: 42, country: "US", sortName: "tom" }, // Document
"sally": { age: 38, country: "AU", sortName: "sally" }, // Document
"richard": { age: 36, country: "UK", sortName: "richard" }, // Document
/* ... */
}
}
使用上面的数据,通过下面的查询,现在将返回/names/richard
,然后返回/names/sally
,再返回/names/Tom
:
val db = Firebase.firestore
db.collection("names")
.orderBy("sortName", Query.Direction.ASCENDING)
.get()
.addOnSuccessListener { documents ->
Log.d(TAG, "Found ${documents.size()} documents")
for (document in documents) {
Log.d(TAG, "> ${documents.getReference().getPath()}")
}
}
.addOnFailureListener { exception ->
Log.w(TAG, "Error getting documents: ", exception)
}