Firestore-查询,然后更新

时间:2019-04-16 18:23:34

标签: javascript firebase google-cloud-firestore

我想返回具有特定ID的项目并对其执行更新操作。我的查询得到了正确的结果,但不允许我更新它。

我尝试按照本教程进行操作:https://www.youtube.com/watch?v=mYyPbfpoZeM 并阅读文档。两者都没有帮助。相同主题的其他主题完全不同。

我有一个对象数据库,这些对象的唯一ID存储为整数。 我有一个HTML表单来获取ID作为用户输入,并在下面的查询中检索相应的对象。

我尝试过了。该查询有效,但更新无效。

db.collection('objects').where('ID','==', ID ).get().then((snapshot) => {
        snapshot.docs.forEach( doc => {
            console.log('debug');
            console.log(doc.data().ID);
        })
    });

我仍然对Firebase和js还是陌生的,所以如果我的代码完全错误,请原谅我。 我目前对此感到困惑:

db.collection('objects').where('ID','==', ID ).get().then((doc) => {
    console.table(doc);
});

哪些仍然无法正常工作。

对于第二个片段,我目前得到了一个难以辨认的表,在其中我无法真正找到想要的对象。

如何在单个文档中更新单个值?

编辑:我忘记了更新功能的实现尝试。 我在片段1的for循环内尝试了doc.update({value:0}),产生了doc.update is not a function。对于doc.data().update(...)同样。

在第二个片段中,我主要尝试查看返回的内容并运行上述uodate函数的变体。没有成功。

2 个答案:

答案 0 :(得分:1)

我通过研究firestore文档中更详细地介绍实际功能的部分,设法使其正常工作。某种程度上,我很难找到它。

db.collection('objects').where('ID', '==', ID).limit(1).get().then((query) => {  
        const thing = query.docs[0];                                                    
        const thingRef = thing.ref;                                                     
        var currVal = thing.data().value;                                               
        const newVal = currVal - minus;
        thingRef.update({value:newVal});
    });

因此,我使用where获取一个Query对象,使用get获取一个then承诺解析内的querySnapshot,使用docs[0]来获取第一个(并且仅)documentSnapshot,最后是ref,以获取使以后整个内容可更新的参考。

答案 1 :(得分:0)

尝试一下:

var objectRef= db.collection("objects").doc(ID);

objectRef.update({
    value: 0
}).then(function() {
    console.log("Document successfully updated!");
}).catch(function(error) {
    // The document probably doesn't exist.
    console.error("Error updating document: ", error);
});