Создание нового документа с пользовательским идентификатором в новой коллекции - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть одна коллекция под названием Inbox, в которой есть несколько документов. Я пытаюсь создать новый документ в новой коллекции поджогов в одной из этих inbox_documents. Новый документ должен иметь собственный идентификатор, здесь он называется folder_id. У меня есть следующий код:

# Get the correct inbox document reference.
inbox_ref = fs_client.collection(u'inbox').document(self.inbox_id)
if not inbox_ref.get().exists:
    raise ValueError("Referenced inbox does not exist.")

# Make a new document in the model collection and update it
# with the provided folder dictionary.
doc = inbox_ref.collection(u'folder').document(folder_id)
doc.set(folder_dict)

Теперь в соответствии с найденной документацией здесь Я могу просто назначить данные документу в коллекции. Если (под) коллекция не существует, Firestore должен автоматически создать ее для меня. На этой странице я нашел фрагмент кода, который делает именно то, что я хочу выполнить sh.

Когда вы используете set () для создания документа, вы должны указать Идентификатор документа для создания. Например:

db.collection(u'cities').document(u'new-city-id').set(data)

Это почти то же самое, что и мой код. Но по какой-то причине, когда я пытаюсь запустить свой код, я получаю следующее ValueError: В документе должно быть четное число элементов пути. Я искал эту ошибку в Интернете и обнаружил, что эта ошибка возникнет, когда указанный путь имеет неправильную длину. Но мой путь кажется правильным.

Когда я не даю пользовательский идентификатор для документа и просто позволяю Firestore создать его автоматически со следующим кодом, тогда код работает, но, очевидно, с автоматически сгенерированным Идентификатор вместо пользовательского идентификатора, который мне нужен.

doc = inbox_ref.collection(u'folder').document()
doc.set(folder_dict)

Я также пытался использовать create() вместо set(), но не повезло. Я использую пакет google-cloud-firestore python, версия 1.6.2.

Любые предложения о том, что я могу попробовать дальше или что я делаю здесь не так?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Идентификаторы документов не могут содержать /, что является причиной, по которой он не прошел и выдал ошибку, что у меня были неровные элементы пути. Исправлено это путем автоматической генерации идентификатора и добавления в документ дополнительного поля для «реального» идентификатора.

0 голосов
/ 20 февраля 2020

Исходя из того, что вы показали, значение folder_id почти не соответствует ожидаемому. Похоже, вы пропустили пустую строку. Используя операторы журнала или отладчик, вы должны убедиться, что вы действительно передаете ожидаемое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...