мой исходный код для записи данных это
var Cloud = firebase.firestore();
Cloud.collection("IPA").doc("Allipas").set({
IPlist: "A;B;",
})
.then(function() {
console.info("Document successfully written!");
})
.catch(function(error) {
console.error("Error writing document: ", error);
});
Затем я хочу добавить новую информацию в свое поле
var Cloud = firebase.firestore();
Cloud.collection("IPA").doc("Allipas").set({
IPlist: "C;",
} , {merge : true})
.then(function() {
console.info("Document successfully written!");
})
.catch(function(error) {
console.error("Error writing document: ", error);
});
но он заменяет поле только на 'C', и я не вижу A и B



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


Ваше слияние можно поменять на обновление?
updteSomething() {
this.db.collection('IPA').doc(Allipas).update({
IPlist: ""A;B;C;",
})
.then(function () {
console.info("Document successfully deleted!");
}).catch(function (error) {
console.error("Error removing document: ", error);
});
}
Опция merge: true объединяет поля, которые вы указываете в вызове API, с существующими полями в документе. Он не объединяет одно значение с существующим значением поля.
Если вы хотите обновить существующее значение поля, вам нужно сначала прочитать значение этого поля, затем обновить его в своем коде и, наконец, записать его обратно в базу данных.
Обычно это делается в транзакции, чтобы никто другой не мог одновременно писать конфликтующие обновления. Пример:
var docRef = Cloud.collection("IPA").doc("Allipas");
Cloud.runTransaction(function(transaction) {
// This code may get re-run multiple times if there are conflicts.
return transaction.get(docRef).then(function(doc) {
if (!doc.exists) {
throw "Document does not exist!";
}
var newIPlist = doc.data().IPlist + "C;";
transaction.update(docRef, { IPList: newIPList });
});
}).then(function() {
console.info("Transaction successfully committed!");
}).catch(function(error) {
console.info("Transaction failed: ", error);
});
Обратите внимание, что Firebase рекомендует не использовать такое составное значение или массивы именно по этой причине: необходимость читать существующее значение перед его обновлением снижает масштабируемость вашего решения. Взгляните на документация по работе с массивами, списками и наборами для альтернатив.
Нет, я хочу объединить новую строку в существующее поле. Это отличается от обновления