Firestore - 查询,然后更新

10 浏览
0 Comments

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);
});

这仍然不起作用。

对于第二个代码段,我目前得到了一个无法阅读的表格,我无法真正找到我要找的对象。

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

编辑:我忘了实现更新函数的尝试。

在第一个代码段的循环中,我尝试了doc.update({value:0}),它产生了doc.update is not a function。对于doc.data().update(...)同样如此。

在第二个代码段中,我主要尝试查看返回的内容,并运行了上述提到的更新函数的变体。但是没有成功。

0
0 Comments

Firestore - Query, then update问题的出现原因是在更新文档时,代码中的ID变量的类型不匹配,导致更新操作失败。同时,还存在一个问题是需要根据旧值计算新值,但不清楚如何实现。

解决这个问题的方法是将ID变量的类型与Firestore中的ID类型保持一致,并通过使用parseInt()方法将用户输入的字符串转换为整数。另外,可以使用Firestore提供的方法来获取生成的ID。

下面是解决这个问题的代码:

// 将用户输入的字符串转换为整数
const ID = parseInt(userInput);
// 查询并更新文档
var objectRef = db.collection("objects").doc(ID);
objectRef.update({
    value: newValue // 根据旧值计算新值,将其赋给newValue变量
}).then(function() {
    console.log("文档更新成功!");
}).catch(function(error) {
    // 可能是文档不存在
    console.error("更新文档时出错:", error);
});
// 获取由Firestore生成的ID
objectRef.get().then(function(doc) {
    if (doc.exists) {
        var generatedID = doc.id;
        console.log("生成的ID:" + generatedID);
    } else {
        console.log("文档不存在");
    }
}).catch(function(error) {
    console.error("获取文档时出错:", error);
});

通过使用parseInt()方法,我们将用户输入的字符串转换为整数,使其与Firestore中的ID类型保持一致。然后,我们使用转换后的ID来查询并更新文档。在更新操作中,我们可以根据旧值计算新值,将其赋给newValue变量。最后,我们通过调用get()方法来获取由Firestore生成的ID,并将其打印出来。

这样,我们就解决了Firestore - Query, then update问题中的类型不匹配和计算新值的问题,并成功更新了文档。

0
0 Comments

在这个问题中,原作者通过研究Firestore文档中更详细的函数部分来解决了问题。但是他发现很难找到这个部分的文档。

问题是如何使用Firestore进行查询,然后更新数据。解决方法如下:

首先,使用where方法来创建一个查询对象(Query),然后使用get方法获取一个查询快照(querySnapshot),在then方法的回调中处理查询结果。通过docs[0]获取第一个(也是唯一一个)文档快照(documentSnapshot),然后使用ref方法获取一个可更新的引用。最后,使用update方法更新数据。

原作者还附带了一个链接,该链接指向了文档中关于querysnapshotdocumentref的部分。

0