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');
我是 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');