Firestore - 嵌套查询

Posted

技术标签:

【中文标题】Firestore - 嵌套查询【英文标题】:Firestore - Nested query 【发布时间】:2019-07-18 08:22:07 【问题描述】:

我真的是 firebase 新手,老实说,我发现查询很难写。我正在使用firebase_admin 在 python 中编写脚本,我希望查询/答案使用 python 代码,但使用任何其他编程语言都可以。

这是我的一份文件,一份文件包含photosset

photos: 
    id1: true
    id2: true

我想在照片对象中检索他们有 id1 的所有项目,对此的查询是什么?

【问题讨论】:

【参考方案1】:

正如Firebase documentation on simple queries 所示:

# Create a reference to the photos collection
ref = db.collection('documents')

# Create a query against the collection
query_ref = ref.where(u'photos.id1', u'==', True)

有关. 表示法,请参阅fields in nested objects 上的文档。

请注意,您可能希望更改数据模型以使用数组来存储此数据,例如arrays can now be used to model mathematical sets。在您的文档中使用这样的数组:

user: ['id1', 'id2']

然后您可以使用以下内容进行过滤:

photos_ref = db.collection('documents')

query = photos_ref.where(u'photos', u'array_contains', u'id1')

要向这个行为类似的数组添加/删除项目,请参阅updating elements in an array 上的文档。

【讨论】:

u 表示什么?不知道我见过这个 这意味着它是一个unicode字符串。见***.com/questions/11279331/…【参考方案2】:

基于 Frank van Puffelen 的解决方案,我还能够使用点符号来实现嵌套效果。查询分配中包含当前用户 ID 的对象。

objectModel: 
      objectName: 'foo',
      otherField: 'bar',
      assignment: 
          installerIds: ['1', '2', '3'],
          otherfields: 'foobar'
      ,

我可以这样查询

p = 字段:'assignment.installerIds',运算符:'array-contains',值:this.currentInstallerId query = query.where(p.field, p.operator, p.value);

或者像弗兰克展示的更一般的格式:

query_ref = ref.where('assignment.installerIds', 'array-contains', '2');

【讨论】:

以上是关于Firestore - 嵌套查询的主要内容,如果未能解决你的问题,请参考以下文章

在 Firestore REST API 中查询嵌套对象

如何在firestore中查询嵌套对象[重复]

在 AngularFire 中检索嵌套 Firestore 查询的 RxJS Observable

在嵌套对象中使用firestore的FieldPath.documentId()

按对象键的Firestore查询

firebase firestore flutter where 查询