Javascript 在firestore firebase中插入并合并特定字段
我的收藏中有一份这种格式的文件Javascript 在firestore firebase中插入并合并特定字段,javascript,node.js,firebase,google-cloud-firestore,Javascript,Node.js,Firebase,Google Cloud Firestore,我的收藏中有一份这种格式的文件 name: xyz, email: xyz@email.com, age: 30, address: { street_no: { complete_address: somedata, pincode: somepin }, city:somecity, state:somestate, landmark:nearby } 在这个文档中,我试图插入完整的\u地址,并将其与以前的记录合并。为
name: xyz,
email: xyz@email.com,
age: 30,
address: {
street_no: {
complete_address: somedata,
pincode: somepin
},
city:somecity,
state:somestate,
landmark:nearby
}
在这个文档中,我试图插入完整的\u地址
,并将其与以前的记录合并。为了实现这一点,我正在尝试这样做
const database = firebase.firestore();
var dataRef = database.collection('collection');
var query = dataRef.doc(key+"").get().then(doc=>{
if(!doc.exists){
res.send("doesn't exist");
}else{
//few checks
if(doc.data().accessid != accessid){
res.send("accessid doesn't match")
}
//here I am trying to insert and merge with the previous data
var form_path = 'address.street_no.complete_address';
dataRef.doc(key+"."+form_path).set({
another_address
}, {merge: true});
}
}).catch(err=>{
console.log(err)
})
但当我执行此操作时,它只需在集合中添加另一个文档,后跟以下路径key.address.street\u no.complete\u address
如何仅插入和合并上一个complete\u地址
在
表单路径中有
而不是/
,因为从中得到的想法很少我相信您的问题在从
var form_path='address.street_no.complete_address'代码>
接下来,您将使用dataRef.doc(key+“+”表单路径)
这意味着唯一要设置的文档是
/addressCollection/key.{addressCollectionId}
和addressCollectionId
beingaddress.street\u no.complete\u address
相反,您要做的是使用点符号访问文档中的属性,如下所示
address: {
street_no: {
complete_address
例如
someDocument.update({
"address.street_no.complete_address": "some_data"
});
请注意,“某些_数据”将替换当前存储的任何数据。您需要执行一次读取并合并数据。比如说
const anotherAddress = { address: "123 Fake Street" };
const document = firebase
.firestore()
.collection("addressCollection")
.doc("someAddressId");
document
.get()
.then(snap => {
const data = snap.data();
const completeAddress = data.address.street_no.complete_address };
// We're using the spread operator here to combine the current completeAddress with anotherAddress
return { completeAddress, ...anotherAddress };
})
.then(newCompleteAddress =>
document.update({
"address.street_no.complete_address": newCompleteAddress
})
);
我相信你的问题在接下来的几行中,从
var form_path='address.street_no.complete_address'代码>
接下来,您将使用dataRef.doc(key+“+”表单路径)
这意味着唯一要设置的文档是
/addressCollection/key.{addressCollectionId}
和addressCollectionId
beingaddress.street\u no.complete\u address
相反,您要做的是使用点符号访问文档中的属性,如下所示
address: {
street_no: {
complete_address
例如
someDocument.update({
"address.street_no.complete_address": "some_data"
});
请注意,“某些_数据”将替换当前存储的任何数据。您需要执行一次读取并合并数据。比如说
const anotherAddress = { address: "123 Fake Street" };
const document = firebase
.firestore()
.collection("addressCollection")
.doc("someAddressId");
document
.get()
.then(snap => {
const data = snap.data();
const completeAddress = data.address.street_no.complete_address };
// We're using the spread operator here to combine the current completeAddress with anotherAddress
return { completeAddress, ...anotherAddress };
})
.then(newCompleteAddress =>
document.update({
"address.street_no.complete_address": newCompleteAddress
})
);
我让它工作了
所以我想我之前尝试做的是在一个集合中创建另一个文档,其中包含与之相关的数据。因此,我开始将所有内容都视为对象,并将对象数据传递给set()
方法
const database = firebase.firestore();
var dataRef = database.collection('collection');
var query = dataRef.doc(key+"").get().then(doc=>{
if(!doc.exists){
res.send("doesn't exist");
}else{
//few checks
if(doc.data().accessid != accessid){
res.send("accessid doesn't match")
}
//here I am trying to insert and merge with the previous data
var mergeData = {
address : {
}
}
var new_address = {
key: "address_data"
}
mergeData.address[street_no] = {complete_address : address}
if(dataRef.doc(key+"").set(mergeData, {merge: true})){
res.send("done")
}else{
res.send("failed")
}
}
}).catch(err=>{
console.log(err)
})
我让它工作了
所以我想我之前尝试做的是在一个集合中创建另一个文档,其中包含与之相关的数据。因此,我开始将所有内容都视为对象,并将对象数据传递给set()
方法
const database = firebase.firestore();
var dataRef = database.collection('collection');
var query = dataRef.doc(key+"").get().then(doc=>{
if(!doc.exists){
res.send("doesn't exist");
}else{
//few checks
if(doc.data().accessid != accessid){
res.send("accessid doesn't match")
}
//here I am trying to insert and merge with the previous data
var mergeData = {
address : {
}
}
var new_address = {
key: "address_data"
}
mergeData.address[street_no] = {complete_address : address}
if(dataRef.doc(key+"").set(mergeData, {merge: true})){
res.send("done")
}else{
res.send("failed")
}
}
}).catch(err=>{
console.log(err)
})
谢谢菲利普,谢谢你的时间和努力。我用另一种方法解决了这个问题。下面是我的答案谢谢。你的回答对我帮助很大!谢谢菲利普,谢谢你的时间和努力。我用另一种方法解决了这个问题。下面是我的答案谢谢。你的回答对我帮助很大!