gpt4 book ai didi

javascript - 带有 merge true 覆盖对象的 firestore 集

转载 作者:行者123 更新时间:2023-11-30 14:24:45 25 4
gpt4 key购买 nike

假设我有一个包含以下数据的文档(没有子集合)

"kdsjkasdlkfsalk" : {
favouriteColor: "brown",
age: 20,
content: {
rand1: "randAns1",
rand2: "randAns2"
}
}

现在我想更改 favouriteColor 并覆盖 content 而不更改 age。因此我使用:

ref.set({
favouriteColor: "blue",
content: {
newRand: "newRandAns",
newRand2: "newRandAns2"
},
}, {merge:true})

想要的结果:

"kdsjkasdlkfsalk" : {
favouriteColor: "blue",
age: 20,
content: {
newRand: "newRandAns",
newRand2: "newRandAns2"
}
}

实际结果:

"kdsjkasdlkfsalk" : {
favouriteColor: "blue",
age: 20,
content: {
newRand: "newRandAns",
newRand2: "newRandAns2",
rand1: "randAns1",
rand2: "randAns2"
}
}

如您所见,{merge:true} 防止覆盖 content,而只是添加新字段。

我可以想到 2 种解决方案,但它们要么首先检索所有数据,要么首先将 content 设置为 bool 值,然后将其设置为所需的对象。有没有更好的方法来获得想要的结果?

最佳答案

而不是使用set

您可以在

上使用 更新
"kdsjkasdlkfsalk" : {
favouriteColor: "brown",
age: 20,
content: {
rand1: "randAns1",
rand2: "randAns2"
}
}

您要这样做是因为您要为 content 提供新属性。 rand1 对比 newRand

Merge 会将新属性合并到现有对象中。

更新示例(点符号)

firebase.firestore().collection("someCol").doc("kdsjkasdlkfsalk").update({
"color": "someNewColor",
"content.rand1": "someNewRandValue",
"content.rand2": "someNewRandValue"
});

const content = {
rand1: "someNewRandValue",
rand2: "someNewRandValue"
}

firebase.firestore().collection("someCol").doc("kdsjkasdlkfsalk").update({
"color": "someNewColor",
content
});

关于javascript - 带有 merge true 覆盖对象的 firestore 集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52127478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com