Firestore - 查询,然后更新
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(...)
同样如此。
在第二个代码段中,我主要尝试查看返回的内容,并运行了上述提到的更新函数的变体。但是没有成功。
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问题中的类型不匹配和计算新值的问题,并成功更新了文档。
在这个问题中,原作者通过研究Firestore文档中更详细的函数部分来解决了问题。但是他发现很难找到这个部分的文档。
问题是如何使用Firestore进行查询,然后更新数据。解决方法如下:
首先,使用where
方法来创建一个查询对象(Query),然后使用get
方法获取一个查询快照(querySnapshot),在then
方法的回调中处理查询结果。通过docs[0]
获取第一个(也是唯一一个)文档快照(documentSnapshot),然后使用ref
方法获取一个可更新的引用。最后,使用update
方法更新数据。
原作者还附带了一个链接,该链接指向了文档中关于querysnapshotdocument
的ref
的部分。