Firestore - 嵌套查询

Firestore - Nested query

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

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

photos: {
    id1: true
    id2: true
}

我想成为 ale 以检索照片对象中具有 id1 的所有项目,对此的查询是什么?

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')

要将 add/remove 个项目添加到这个行为类似集合的数组中,请参阅 updating elements in an array 上的文档。

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

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

我可以这样查询

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

或者像 Frank 展示的更通用的格式:

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