Пожарная транзакция: установить идентификатор первого документа для второго документа - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь добавить два документа в две разные коллекции.

скажем, coll1 & coll2.

Я добавляю документ в coll1 => Я получаю идентификатор документа, который мне нужен чтобы установить его для документа coll2 в качестве идентификатора, я могу просто написать два добавления, но я пытаюсь выполнить их в транзакции, чтобы в случае сбоя одного из них оба потерпели неудачу.

Я не смог этого сделать, используя эта ссылка

Ниже приведен код, который я должен преобразовать в пакеты:

await db.runTransaction(
      async function (transaction) {
        const coll1 = {
          text: 'This is collection 1 text',
        }

        const coll1Doc = await db
          .collection('coll1')
          .add(coll1)
        // I tried transaction.set(db.collection('coll1').doc(), coll1) but this doesn't return the doc or the docId which we need in the next step.
        // Similay batch.set is also not returning the newly added/edited doc or its Id.

        if (coll1Doc && coll1Doc.id) {
          const coll1Id = coll1Doc.id
          const coll2 = {
            text: 'This is collection 2 text',
          }
          await db
            .collection('coll2')
            .doc(coll1Id)
            .set(coll2)
        }
      }
    )

1 Ответ

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

Идентификаторы документов Firestore генерируются внутри кода вашего приложения и статистически гарантированно являются уникальными. Таким образом, ваш add() вызов, по сути, выполняет следующие два шага:

  1. Создайте новый уникальный идентификатор
  2. Создайте DocumentReference для этого идентификатора
  3. Установите данные в этом DocumentReference

С этим знанием вы можете создать DocumentReference самостоятельно на основе идентификатора, который вы получите, не используя объект транзакции.

const coll1Doc = db
  .collection('coll1')
  .doc();
const id1 = coll1Doc.id;
await coll1Doc.set(coll1);

Теперь вы можно использовать id1 во второй операции записи.

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