如何根据分配给多个不同邮政编码的人员从 Firestore 获取数据?

2023-12-03

以下是我用来从中提取数据的代码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 的字段。

enter image description here


如果可以更改数据库模式,我会想到这样的事情:

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方法,就像在下面的帖子中解释我的答案一样:

  • Firestore - 在本地合并两个查询

收到订单后,我可以根据状态在客户端上过滤它们。但是,如果您需要根据特定状态获取用户的所有订单,您还可以添加另一个 whereEqualTo() 调用,如下所示:

rootRef.collection("orders")
                    .whereEqualTo("zipCode", "zipCodeOne")
                    .whereEqualTo("status", "Pending")
                    .get()

rootRef.collection("orders")
                    .whereEqualTo("zipCode", "zipCodeTwo")
                    .whereEqualTo("status", "Pending")
                    .get()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据分配给多个不同邮政编码的人员从 Firestore 获取数据? 的相关文章

  • 是否可以将我的应用中的 Firebase Analytics 数据嵌入到网页中?

    我搜索了很多有关将 Firebase Analytics 从我的应用程序数据嵌入到我的网站的后端 UI 的方法 是否可以通过某些特定的 API 方法自动执行此过程 以显示我的 Firebase 应用程序中的这些指标 例如安装数量甚至受众数据
  • doInBackground 运行时是否可以停止 asynctask?

    我正在 ActivityB Oncreate 中创建异步任务 在该任务中 我正在运行无限 while 循环doInBackground 当我转到上一个活动并再次回到该活动时 创建了另一个异步任务 我的问题现在是两个无限 while 循环正在
  • 更改工具栏中汉堡图标的大小?

    我有两个问题 可能很奇怪 但无论如何 我有带有应用程序标题的工具栏 如何将其更改为非徽标的图片 下一个问题 是否可以设置 更改工具栏中汉堡图标的大小 我在下面的下一个代码的帮助下制作了经典的导航抽屉 我也使用了 ActionBarDrawe
  • 如何从另一个xml文件动态更新xml文件?

    我想从另一个 xml 文件更新 xml 文件 我使用了一个 xml 文件 如下所示 one xml
  • android 谷歌+登录定制

    我正在创建一个 Android 应用程序 现在我正在实现社交网络登录 Facebook 按钮很好 但 google 按钮的语言与 Facebook 不同 另外 它只说 登录 我想让它说 用谷歌登录 我是 android 编程的新手 看到我需
  • 无法解析符号 FlutterActivity

    我使用 VCS gt Checkout from Version Control 将 flutter 项目从 github 导入到 Android Studio 中 现在我面临的问题是 Cannot resolve symbol Flutt
  • 更改 AChartEngine 中的图例大小

    我想专门更改饼图的图例大小输出 我已经尝试了所有可以找到的 AChartEngine 方法 但没有一个只能更改图例文本大小 我必须重写 onDraw 函数吗 如果是这样 怎么办 要设置图例高度 请使用 renderer setLegendH
  • 在 Android 中将应用程序上下文保存到静态变量是否安全?

    我知道在 Android 上使用静态变量是相当危险的 特别是当您将它们引用到活动时 但是 如果我有一个扩展 Application 的类 我们称此类为 App 引用此类的实例是否安全 如果是这样 任何其他类对应用程序上下文进行任何类型的引用
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • 如何在照片删除后刷新 Android 的 MediaStore

    问题 如何使媒体存储刷新其已删除文件的条目 从外部存储中删除代码中的照片后 我仍然在图库中看到已删除照片的插槽 空白照片 画廊似乎反映了媒体存储 并且在媒体存储中找到了已删除的照片 直到手机重新启动或通常 直到重新扫描媒体为止 尝试扫描已删
  • 如何检测 Google Play 上是否有我的应用程序的更新? [复制]

    这个问题在这里已经有答案了 有没有办法以编程方式检查 Google Play 上我的应用程序是否有更新 以便通知用户 我知道 android google play 有自动通知 但我想使用我自己的通知 弹出消息来更新可用性 有点像 Vibe
  • Cordova 地理定位不适用于 Android

    我想在 Android 上使用地理定位 我用 Apache Cordova 编写应用程序 地理定位在 android 电脑模拟器和 android 手机上均不起作用 I try http cordova apache org docs en
  • 在 Android 上的测试用例之外运行 ExtractDecodeEditEncodeMuxTest

    我正在尝试添加在 Android 上提取 解码 编辑 编码和混合视频的功能 因此 我发现了一些非常有用的实现 它是Android CTS的一部分ExtractDecodeEditEncodeMuxTest https android goo
  • Android 在启动时启动服务,如何在设备重启后重新启动服务类?

    我需要在启动时启动一项服务 我搜索了很多 他们正在谈论广播接收器 由于我是 Android 开发新手 所以我对 Android 上的服务并没有清楚的了解 请提供一些源代码 您的接收者 public class MyReceiver exte
  • 版本 5 上带有 getBackground().setAlpha 的按钮 - 棒棒糖无法正常工作

    我有这段代码 适用于自 API 14 以来的每个版本 但在 Android 5 0 Lollipop 上无法正常工作 以下是我希望按钮出现的方式 单击按钮1 buttonArrivals getBackground setAlpha 180
  • 当应用程序未运行时如何堆叠 Firebase Cloud Messaging 通知?

    我在用Firebase Cloud Messaging将推送通知从我的服务器发送到我的 Android 应用程序 当应用程序运行时 通知是stacked因为我将它们设置为我的一个组FirebaseMessagingService 这很好 但
  • Android:如何监控WiFi信号强度

    当信号强度发生变化时我会收到通知 我尝试创建以下方法并在 onCreate 中调用它 private void initializeWiFiListener Log i TAG executing initializeWiFiListene
  • 如何在新标签 android webview 中打开链接? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经使用 webview 创建了一个 android 应用程序来显示我的网站 我什至想添加在新选项卡中打开链接的功能 但我找不到任何
  • Android:单一活动,多个视图

    我不是 Android 专业人士 尽管我开发了一个包含 50 多个活动的应用程序 这使得该应用程序非常庞大 经过8周的开发 现在出现了一些问题 导致应用程序难以维护和升级 我正在处理的主要问题是 我无法将对象引用传递给活动的构造函数 事实上
  • 如何更改锁屏自定义文本(所有者信息)?

    我写了程序代码 String message This is test Settings System putString context getContentResolver Settings Secure LOCK PATTERN EN

随机推荐