gpt4 book ai didi

android - 您能否在Firestore中的一个查询中将多个whereEqualTo操作链接在一起

转载 作者:行者123 更新时间:2023-12-02 13:34:44 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个多选对话框,其中包含用户可以选择的各种过滤器选项,以便根据文档的rarity字段过滤数据库。由于过滤器对话框中有许多选项,因此,如果我们考虑过滤器的所有可能组合,则手工覆盖每种情况将花费一些时间。考虑到这一点,我尝试创建一个起始查询,如下所示,然后遍历用户选择的过滤器列表,并尝试为每个过滤器的查询添加whereEqualTo("rarity",filter)操作。我注意到您不能像普通变量那样连接查询var i += 5,所以我想知道是否有解决此类问题的方法。 您可以在 同一查询中以步/片断的形式实际应用多个 whereEqualTo 操作吗?

在收到用户在FilterActivity.kt类中选择的过滤器后,我尝试了以下操作:

class FilterActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_filter)

val db = FirebaseFirestore.getInstance()

val filters:ArrayList<String>? = intent.getStringArrayListExtra("filterOptions")
Log.d("FilterActivity", "filter options $filters")

var query = db.collection("Cards").orderBy("resID")

for(filter in filters!!) {
query = query.whereEqualTo("rarity",filter)
}

query.get().addOnSuccessListener { querySnapshot ->
if(querySnapshot.isEmpty) Log.d("FilterActivity","is empty")
for(doc in querySnapshot.documents) {
Log.d("FilterActivity", "${doc.getString("name")} - ${doc.getString("rarity")}")
}
}
}
}

最佳答案

基本上,您尝试执行do 操作,在其中检索所有文档,其中稀有字段与数组中的任何值匹配。

您正在尝试新的firebase whereIn操作,可以在其中传递值的数组,但是过滤器中的最大限制为10

 FirebaseFirestore.getInstance()
.collection("Cards")
.orderBy("resID")
.whereIn("rarity",filters!!.toList())
.get().addOnSuccessListener { querySnapshot ->
if (querySnapshot.isEmpty) Log.d("FilterActivity", "is empty")
for (doc in querySnapshot.documents) {
Log.d("FilterActivity", "${doc.getString("name")} - ${doc.getString("rarity")}")
}
}

过滤器arraylist最多可以包含10个值

关于android - 您能否在Firestore中的一个查询中将多个whereEqualTo操作链接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59372264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com