【问题标题】:Firebase Firestore don't have OR or difference logical operator or whereNotEqual [duplicate]Firebase Firestore 没有 OR 或差异逻辑运算符或 whereNotEqual [重复]
【发布时间】:2019-09-19 16:08:26
【问题描述】:

我有一个文档集合,其中每个文档都有一个名为“位置”的属性,该属性可以采用可能的字符串值之一:A、B、C、D、E ...(来自控制对象的 ENUM状态机)

如何在 firestore 中创建查询以返回“位置”属性值为“A”或“D”的文档?

在 Firestore 文档中,可以理解没有差异逻辑运算符的实现。复合查询仅满足单个 ATTRIBUTE 值的“AND”条件。

在这种特殊情况下,我无法更改属性类型,因为将来如果我使用数字范围,可能会添加其他元素并导致需求问题。

我想进行两个查询并合并结果。但是使用分页和复杂查询(不起作用)会很糟糕。除了跑两个查询,以后我需要调整的条件越多,代码维护越多,查询越多!对吧?

有没有办法解决这个问题?

【问题讨论】:

  • 不幸的是,您现在应该这样做,通过创建两个查询并合并结果客户端。
  • @AlexMamo 我看到了你的问题,但是,虽然它是提供的“解决方案”。对于许多标准组合,它在实践中不起作用。特别是如果结果需要在运行时使用 Firebase UI Firestore 或自定义适配器等进行“分页”。
  • 我知道,所以希望 Firebase 团队尽快发布该功能。
  • 您为什么对副本投了反对票?你至少可以提供一个解释。

标签: android firebase google-cloud-firestore


【解决方案1】:

逻辑或查询。在这种情况下,您应该为每个 OR 条件创建一个单独的查询,并在您的应用中合并查询结果。

来源:https://firebase.google.com/docs/firestore/query-data/queries#compound_queries

【讨论】:

  • 感谢您的贡献!我编辑了问题以使其更清楚。使用 N 个查询和使用分页并不是那么简单。直接在查询中使用其他一些解决方案会很有趣。在大多数情况下,使用分页管理 N 个集合确实不可行。
  • 从您的其他 cmets 中,我认为需要对数据进行规范化才能实现您想要的功能和效率。当查询开始变得过于复杂时,通常表明需要进行规范化
  • 真的吗?一点也不。我又回到了 mongo atlas。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
  • 2010-12-08
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多