Firestore создавать документы, если они не существуют, пропустить, если они есть - PullRequest
1 голос
/ 30 января 2020

Я хочу создать документы Firestore, если они не существуют - если они существуют, пропустите их (не обновляйте). Вот поток

var arrayOfRandomIds = [array of 500 random numbers];
for (var id of arrayOfRandomIds)
{
 var ref = db.collection("tickets").doc(id);
 batch.set(ref, {name: "My name", location: "Somewhere"}, { merge: true });
}
batch.commit();

Я просто хочу знать, перезапишет ли это какие-либо существующие документы, если они существуют? Я не хочу ничего перезаписывать, просто пропущено.

Спасибо.

Ответы [ 3 ]

1 голос
/ 30 января 2020

Я хочу создать документы Firestore, если они не существуют - если они существуют, пропустите их (не обновляйте).

В этом случае вам следует проверить, конкретный документ фактически существует в коллекции непосредственно перед операцией записи. Если он существует , а не , создайте его, в противном случае не предпринимайте никаких действий.

Поэтому вы должны просто использовать функцию set(), не передавая merge: true.

1 голос
/ 31 января 2020

Я думаю, что вы можете использовать правила безопасности для достижения sh этого. Таким образом, вы не будете платить за прочтение дополнительного документа, чтобы увидеть, существует ли он уже.

service cloud.firestore {
  match /databases/{database}/documents {
    match /tickets/{id} {
      allow create;
    }
  }
} 
1 голос
/ 30 января 2020

Firestore не имеет встроенной операции «создать, но не перезаписать». Вот только доступные операции:

  • update: только изменить содержимое существующего документа
  • установить без слияния: создать или перезаписать
  • установить с слиянием: создать или обновите, если существует

Вместо пакета вместо этого можно выполнить транзакцию , которая проверяет, существует ли документ, а затем создает его условно, если он не существует. уже существует. Вам нужно будет написать эту логику c в вашем обработчике транзакций.

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