Firestore 文档快照 get() 不适用于包含连字符的字段名称的虚线字符串表示法



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

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

我得到了文档快照:

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

如果我尝试在此快照上使用 get(( 方法访问"代理 ID"字段名称:

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

值错误:路径元数据。代理 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'))工作得很好。

根据文档,以下是对字段路径的约束:

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

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

最新更新