在Firestore Firebase中插入并合并特定字段。

7 浏览
0 Comments

在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中使用.而不是/,是因为我从这个链接上得到了一些想法。

0
0 Comments

在这段代码中,作者试图在Firestore Firebase中插入和合并一个特定字段。然而,作者遇到了一些问题,并寻求解决方法。

问题的原因是,作者之前尝试的方法会在集合中创建另一个具有相应数据的文档。因此,作者决定将一切都视为对象,并将一个对象数据传递给set()方法。

解决方法是,首先使用firebase.firestore()方法获取Firestore数据库的实例。然后,作者从数据库中获取一个特定文档,并检查该文档是否存在。如果文档不存在,则返回"doesn't exist";否则,进行一些检查。在这里,作者尝试插入和合并之前的数据。

将要插入和合并的数据存储在mergeData对象中,其中包含一个名为address的字段。然后,作者定义了一个新的地址对象new_address,并将其添加到mergeData.address中。最后,将mergeData对象传递给set()方法,并使用{merge: true}选项来指定合并操作。

如果插入和合并操作成功,则返回"done";否则,返回"failed"。

通过这种方式,作者解决了在Firestore Firebase中插入和合并特定字段的问题。

0
0 Comments

问题出现的原因是在代码中使用了错误的路径访问字段,导致无法正确插入和合并特定的字段。

解决方法是使用正确的路径访问字段。通过使用点符号表示法,可以访问嵌套在文档中的属性。例如,可以使用以下代码将特定字段插入和合并到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提供的帮助,我已经用另一种方法解决了这个问题。非常感谢您的答案!

0