у меня есть коллекция
/userFeed
Где я создаю/удаляю документы (представляющие пользователей), когда текущий пользователь начинает подписываться на них/отписываться от них.
...
/userFeed (C)
/some-followed-user (D)
-date <timestamp>
-interactions <number>
Когда пользователю нравится пост, поле interactions будет обновляться. Но... что, если пользователь не подписан на владельца поста? Тогда мне просто нужно будет пропустить обновление документа, без необходимости создавать сбои/ошибки.
const currentUserFeedRef = firestore
.collection("feeds")
.doc(currentUserId)
.collection("userFeed")
.doc(otherUserId);
const data = {
totalInteractions: admin.firestore.FieldValue.increment(value),
};
const precondition = {
exists: false, // I am trying weird things
};
if (batchOrTransaction) {
return batchOrTransaction.update(
currentUserFeedRef,
data,
precondition
);
}
Можно ли просто "пропустить обновление, если документ не существует"?
Нет ли способа сделать это без обработки ошибок? Я использую транзакции для обновления документа и не хочу, чтобы все мои транзакции терпели неудачу. Я знаю, что могу просто "читать" и проверять, существует ли .exists(), но мне не нравится дополнительное чтение.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Is it possible to just "skip the update if the doc doesn't exist"?
Нет, не так, как вы это объясняете. Обновления Firestore не прерываются автоматически.
Если вам нужно знать, существует ли документ перед его обновлением, вы должны сначала просто прочитать его и убедиться, что он существует. Вы можете очень легко сделать это в транзакции, и вы можете быть уверены, что обновление не завершится ошибкой из-за отсутствия документа, если вы сначала проверите его таким образом, используя объект транзакции.
На самом деле то, что вы пытаетесь сделать, показано в самом первом примере в файле документация.
Либо вы можете сначала проверить, существуют ли документы, иначе просто поймайте ошибку, вызванную SDK. Если ошибка говорит, что документ не существует, ничего не делайте, но если это действительная ошибка, возможно, что-то пошло не так.