Снимок документа firestore get () не работает с точечной нотацией имен полей, содержащих дефис - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть простой документ под названием «агенты» в коллекции под названием «mycoll» с набором данных примерно так:

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

Я получил снимок документа:

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

Если я пытаюсь получить доступ к имени поля 'agent-ids', используя метод get () для этого снимка:

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

ValueError: Path метаданные.agent-идентификаторы не используются, остаток: -ids

Однако, если я пытаюсь получить доступ к «agent_ids» с помощью метода get (), это прекрасно работает:

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

['foo1', 'booo']

Мой вопрос заключается в том, что является причиной такого различного поведения имен полей с '-' и почему?Любая документация, которая объясняет об этом?Я понимаю, что snapshot.get () принимает аргумент FieldPath вместо простой строки, но существующая документация API не предупреждает, что имена полей с '-' не допускаются в строках имени пути к полю, ограниченных '.'На самом деле snapshot.get(firestore.client().field_path('metadata', 'agent-ids')) работает просто отлично.

1 Ответ

0 голосов
/ 20 сентября 2019

Основываясь на документации , здесь приведены ограничения на пути к полям:

  • Должны разделять имена полей с одним периодом (.)
  • Необходимо заключитькаждое имя поля в обратных галочках, если имя поля не соответствует следующим требованиям:
    • Имя поля содержит только символы az, AZ, 0-9 и подчеркивание (_)
    • Имя поля соответствуетне начинаться с 0-9

Таким образом, имя поля / путь, содержащий тире, будет увеличивать ValueError .Приведенные выше ограничения также объясняют, почему snapshot.get(firestore.client().field_path('metadata', 'agent-ids')) работает просто отлично, потому что имя поля заключено в обратные кавычки.

...