Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在firestore firebase中插入并合并特定字段_Javascript_Node.js_Firebase_Google Cloud Firestore - Fatal编程技术网

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
being
address.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
being
address.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)
})

谢谢菲利普,谢谢你的时间和努力。我用另一种方法解决了这个问题。下面是我的答案谢谢。你的回答对我帮助很大!谢谢菲利普,谢谢你的时间和努力。我用另一种方法解决了这个问题。下面是我的答案谢谢。你的回答对我帮助很大!