在Firestore Firebase中插入并合并特定字段。
在Firestore Firebase中插入并合并特定字段。
我在我的收藏中有一个以此格式的文档:
name: xyz, email: xyz@email.com, age: 30, address: { street_no: { complete_address: somedata, pincode: somepin }, city:somecity, state:somestate, landmark:nearby }
在这个文档中,我正在尝试插入并合并complete_address
与先前的记录。为了实现这一目标,我正在尝试以下操作:
const database = firebase.firestore(); var dataRef = database.collection('collection'); var query = dataRef.doc(key+"").get().then(doc=>{ if(!doc.exists){ res.send("不存在"); }else{ //进行一些检查 if(doc.data().accessid != accessid){ res.send("accessid不匹配") } //在这里,我正在尝试插入并与先前的数据合并 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_no.complete_address
。
我应该怎么做才能只插入并与先前的complete_address
合并?
form_path
中使用.
而不是/
,是因为我从这个链接上得到了一些想法。
在这段代码中,作者试图在Firestore Firebase中插入和合并一个特定字段。然而,作者遇到了一些问题,并寻求解决方法。
问题的原因是,作者之前尝试的方法会在集合中创建另一个具有相应数据的文档。因此,作者决定将一切都视为对象,并将一个对象数据传递给set()
方法。
解决方法是,首先使用firebase.firestore()
方法获取Firestore数据库的实例。然后,作者从数据库中获取一个特定文档,并检查该文档是否存在。如果文档不存在,则返回"doesn't exist";否则,进行一些检查。在这里,作者尝试插入和合并之前的数据。
将要插入和合并的数据存储在mergeData
对象中,其中包含一个名为address
的字段。然后,作者定义了一个新的地址对象new_address
,并将其添加到mergeData.address
中。最后,将mergeData
对象传递给set()
方法,并使用{merge: true}
选项来指定合并操作。
如果插入和合并操作成功,则返回"done";否则,返回"failed"。
通过这种方式,作者解决了在Firestore Firebase中插入和合并特定字段的问题。
问题出现的原因是在代码中使用了错误的路径访问字段,导致无法正确插入和合并特定的字段。
解决方法是使用正确的路径访问字段。通过使用点符号表示法,可以访问嵌套在文档中的属性。例如,可以使用以下代码将特定字段插入和合并到Firestore Firebase中的文档中:
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; // 使用扩展运算符将当前的completeAddress与anotherAddress合并 return { completeAddress, ...anotherAddress }; }) .then(newCompleteAddress => document.update({ "address.street_no.complete_address": newCompleteAddress }) );
感谢Philip提供的帮助,我已经用另一种方法解决了这个问题。非常感谢您的答案!