以下是我用来从中提取数据的代码firestore
。然而,作为应用程序开发的一部分,我的要求也发生了变化。现在,我需要的是只为被分配服务特定区域的人员提取订单,该区域可以通过每个订单都会有的邮政编码来识别。
目前,使用我的代码,我可以根据订单状态以及发布订单的产品所有者(由当前登录的用户标识)获取订单。根据我的新要求,每个邮政编码都分配给某人(可以分配一个人为许多邮政编码提供服务。)并且我需要仅向用户显示他被分配提供服务的那些订单。
如果只有一个 ZIP 分配给服务提供商,我知道如何提取数据。但在这种情况下,我不知道如何设计数据库以将邮政编码分配给服务提供商并获取数据。
我想用它来做到这一点.whereIn
就像我对“订单状态”所做的那样,但有两个问题,一是不能有两个.whereIn
第二,我不想对其进行硬编码。所以即使我的想法是对的,我也不知道该怎么做。
我希望我的问题很清楚。
fun getOrderStatusList(fragment: OrdersByStatusFragment) {
mFireStore.collection("orders")
.whereIn(
"order_status",
listOf("Pending", "Order Received", "In Process", "Packed", "Shipped")
)
.whereEqualTo("product_owner_id", getCurrentUserID())
.get()
.addOnSuccessListener { document ->
val list: ArrayList<OrderStatus> = ArrayList()
for (i in document.documents) {
val orderStatus = i.toObject(OrderStatus::class.java)!!
orderStatus.id = i.id
list.add(orderStatus)
}
fragment.successOrderStatusList(list)
}
.addOnFailureListener {
fragment.hideProgressDialog()
}
}
EDIT:
分配给每个用户的邮政编码可用,如数据库的屏幕截图所示。文档名称与当前用户 ID 的 id 相同,该 ID 也可在文档内使用字段名称“id”获取。
我只想获取与分配给用户的任何邮政编码匹配的“订单”。每个订单都包含一个名为 zipCode 的字段。
如果可以更改数据库模式,我会想到这样的事情:
Firestore-root
|
--- users
| |
| --- $uid
| |
| --- zipCodes: ["zipCodeOne", "zipCodeTwo"]
|
--- orders
|
--- $orderId
|
--- zipCode: "zipCodeOne"
|
--- status: "Pending"
由于用户可以为多个邮政编码提供服务,因此我会为每个用户添加一组邮政编码。为了获取与用户相对应的订单,我将对用户拥有的每个邮政编码执行查询:
rootRef.collection("orders")
.whereEqualTo("zipCode", "zipCodeOne").get()
rootRef.collection("orders")
.whereEqualTo("zipCode", "zipCodeTwo").get()
上面的每个语句都会返回一个 Task 对象,因此您可以将所有 Task 对象传递给whenAllSuccess
方法,就像在下面的帖子中解释我的答案一样:
收到订单后,我可以根据状态在客户端上过滤它们。但是,如果您需要根据特定状态获取用户的所有订单,您还可以添加另一个 whereEqualTo() 调用,如下所示:
rootRef.collection("orders")
.whereEqualTo("zipCode", "zipCodeOne")
.whereEqualTo("status", "Pending")
.get()
rootRef.collection("orders")
.whereEqualTo("zipCode", "zipCodeTwo")
.whereEqualTo("status", "Pending")
.get()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)