我想返回具有特定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函数的变体。没有成功。
答案 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);
});