firebase - 火存储 : query where clause > nested field

标签 firebase google-cloud-firestore

我正在使用 Flutter 和 Firestore。假设我的数据库如下所示:

[
  {
    Name: 'John',
    Address: {
      Street: "John doe street"
      Postal: "12047"
    }
  },
  {
    Name: 'Mary',
    Address: {
      Street: "Fleet street"
      Postal: "1242B"
    }
  }
]

我现在想要搜索邮政编码包含“12”的所有人员。因此这意味着该虚拟数据库中的两条记录。

但是如何过滤嵌套字段“Address.Postal”?

var ref = FirebaseFirestore.instance;
var query = '12';
ref.collection('users')
        .where(
          'Address.Postal', // Won't work
          ... // There is no 'like' operator or something that looks alike
        );

仅供引用,Flutter 中的项目无关紧要。

最佳答案

where() 函数现在接受 FieldPath 实例作为第一个参数。这允许您引用嵌套字段或 documentId() 在您的查询中。

示例:

queryText = '12';

postalRef = new FieldPath('Address', 'Postal');
ref.collection('users')
        // Equivalent of LIKE "queryText%"
        .where(postalRef, '>=', queryText)
        .where(postalRef, '<=', queryText+ '\uf8ff');

对于 SQL LIKE 语句的 Firestore 等效项,this answer explains it better 。但是,简短的解释是您可以使用 >=<=运营商查询您的string按字符值的字段。

\uf8ff (私有(private)使用区域 )只是此操作的常用分隔符,因为:

  • 这是一个非常高级的 unicode 字符
  • 这超出了您对基于网络的“文本搜索”的期望。

关于firebase - 火存储 : query where clause > nested field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70961448/

相关文章:

firebase - Flutter Firestore 缓存流

javascript - 如何从 React/Firebase 中的 Promise 中获取数据?

android - 如何在 firebase 数据库中保存对象?

javascript - 保存对 Firestore 的引用类型,但获取 [object object] 字符串

database - 是否可以在 Firestore 上添加一个层,这样更改就不会直接提交?

angular - 类型 'Observable<unknown[]>' 不可分配给类型 'Observable<Event[]>'

javascript - 有什么方法可以从 Angular 组件使用 onCall Firebase 函数吗?

javascript - 在 Cloud Firestore onCreate 触发器中运行批处理或事务

android - Android Studio:用于将数据上传到Firebase的辅助类

firebase - 如何将数据从一个提供者模型传递到另一个提供者模型?