Как вставить идентификатор документа в качестве значения поля Firestore с Go - PullRequest
0 голосов
/ 14 апреля 2020

Я хотел бы искать документы с определенным идентификатором во время запроса группы сбора. Из того, что я прочитал, невозможно выполнить CGQ, используя идентификатор документа напрямую, поэтому я намерен отразить идентификатор документа в поле id внутри документа.

Я пытался firestore.DocumentID (см. фрагмент кода ниже), ожидая, что он будет служить часовым значением, представляющим идентификатор документа (еще не известно на момент вызова метода). Я обнаружил, что firestore.DocumentID на самом деле является константой со значением "__name__", которая становится строковым значением поля id в результирующем документе.

docRef, _, err := colRef.Add(ctx, map[string]interface{}{
        "id":       firestore.DocumentID, // this does not work
        "events":   events,
        "url":      url,
        "enabled":  true,
        "created":  firestore.ServerTimestamp,
        "modified": firestore.ServerTimestamp,
})

Можно ли написать документ Идентификатор внутри документа в поле id при атомарном вызове метода Add?

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

1 Ответ

1 голос
/ 14 апреля 2020

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

Чтобы получить оба в базе данных с помощью одной операции записи, вам придется разделить создание нового DocumentReference (которая является операцией на стороне клиента) из фактической записи данных.

Итак, два шага:

  1. Создайте новый DocumentReference, вызвав colRef.NewDoc().
  2. Запишите данные (включая идентификатор) в ссылку с помощью docRef.Set().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...