firestore文档快照get()不适用于包含连字符

时间:2019-09-19 17:45:14

标签: google-cloud-firestore

我在名为“ mycoll”的集合下有一个名为“ agents”的简单文档,其数据集如下所示:

{
 'metadata': {
   'agent-ids': ['fdfd', 'asdfasdf', 'rerere'],
   'agent_ids': ['foo1', 'booo']
}

我得到了文档快照:

snapshot = firestore.client().document('mycoll/agents').get()

如果我尝试在此快照上使用get()方法访问“ agent-ids”字段名称:

agent-list-with-hypens = snapshot.get('metadata.agent-ids')
  

ValueError:路径元数据.agent-id未使用,残基:-ids

但是,如果我尝试使用get()方法访问“ agent_ids”,则效果很好:

print(snapshot.get('metadata.agent_ids'))
  

['foo1','booo']

我的问题是什么导致带有'-'的字段名称出现这种不同的行为,为什么?有任何文档对此进行解释吗?据我了解,snapshot.get()会使用FieldPath参数而不是纯字符串,但是现有的API文档并未警告以'。'分隔的字段路径名称字符串中不允许带有'-'的字段名称。 实际上,snapshot.get(firestore.client().field_path('metadata', 'agent-ids'))可以正常工作。

1 个答案:

答案 0 :(得分:0)

基于documentation,这是字段路径的约束:

  • 必须使用单个句点(。)分隔字段名称
  • 除非字段名称满足以下要求,否则必须将每个字段名称括在反引号中:
    • 字段名称仅包含字符a-z,A-Z,0-9和下划线(_)
    • 字段名称不能以0-9开头

因此,包含破折号的字段名称/路径将引发 ValueError 。上述约束条件也说明了snapshot.get(firestore.client().field_path('metadata', 'agent-ids'))正常工作的原因是因为字段名称包含在反引号中。