如何在firebase cloud firestore android中按字母顺序订购物品



我有一个名为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)
}

最新更新