我编写数据的初始代码是
var Cloud = firebase.firestore();
Cloud.collection("IPA").doc("Allipas").set({
IPlist: "A;B;",
})
.then(function() {
console.log("Document successfully written!");
})
.catch(function(error) {
console.error("Error writing document: ", error);
});
然后我想将新信息合并到我的Field
中 var Cloud = firebase.firestore();
Cloud.collection("IPA").doc("Allipas").set({
IPlist: "C;",
} , {merge : true})
.then(function() {
console.log("Document successfully written!");
})
.catch(function(error) {
console.error("Error writing document: ", error);
});
但它取代了' C'只是,我不能看到A&乙
答案 0 :(得分:1)
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.log("Transaction successfully committed!");
}).catch(function(error) {
console.log("Transaction failed: ", error);
});
请注意,Firebase建议不要使用此类复合值或数组,正是出于这个原因:在更新之前必须读取现有值会降低解决方案的可伸缩性。请查看documentation on working with arrays, list, and sets替代方案。
答案 1 :(得分:0)
您的合并可以更改以进行更新吗?
updteSomething() {
this.db.collection('IPA').doc(Allipas).update({
IPlist: ""A;B;C;",
})
.then(function () {
console.log("Document successfully deleted!");
}).catch(function (error) {
console.error("Error removing document: ", error);
});
}