Обновление после вашего комментария :
Ваше требование: «Я хочу добавить новый документ с идентификатором:« 1A2b3Cd », если он не существует, и если он существует, и я пытаюсь добавить новый документ с идентификатором:« 1A2b3Cd », я хочу чтобы получить ошибку. "
Я думаю, что лучше было бы использовать транзакцию следующим образом:
var docRef = db.collection(COLLECTION_NAME).doc(myObj.code);
return db.runTransaction(function(transaction) {
return transaction.get(docRef).then(function(doc) {
if (doc.exists) {
throw "Document already exists!";
}
transaction.set(docRef, myObj);
});
}).then(function() {
console.log("Transaction successfully committed!");
}).catch(function(error) {
console.log("Transaction failed: ", error);
});
Как подробно описано в doc с методом set()
, «если документ еще не существует, он будет создан».
Если вы хотите «обновить поле определенного (существующего) документа», вы должны предоставить объект SetOptions
с merge: true
до set()
метод следующим образом (выдержка из doc ):
var cityRef = db.collection('cities').doc('BJ');
var setWithMerge = cityRef.set({
capital: true
}, { merge: true });
Итак, в вашем случае:
db.collection(COLLECTION_NAME).doc(myObj.code)
.set(myObj, { merge: true })
.then(() => {
console.log('SENT!');
})
.catch(error => {
console.error('Error: ', error);
})
Обратите внимание, что разница с методом update()
заключается в том, что при update()
«обновление завершится неудачей, если применить его к документу, который не существует».