【发布时间】:2021-09-08 05:20:59
【问题描述】:
我从 firestore 收集了这些物品:
- 可用性:真
- 库存:100
- 项目:项目1
我有点想在提交表单后减少库存:我有这些where() 来比较用户选择的是否与保存在 firestore 中的相同。
function incrementCounter(collref) {
collref = firestore
.collection("items")
.doc()
.where(selectedItem, "==", selectedItem);
collref.update({
stocks: firestore.FieldValue.increment(-1),
});
}
这就是我提交表单的方式,我在保存后设置了incrementCounter():
const handleSubmit = (e) => {
e.preventDefault();
try {
const userRef = firestore.collection("users").doc(id);
const ref = userRef.set(
{
....
},
},
{ merge: true }
);
console.log(" saved");
incrementCounter();
} catch (err) {
console.log(err);
}
};
提交表单没有错误。但是,incrementCounter() 不起作用并显示此错误:
TypeError: _Firebase_utils__WEBPACK_IMPORTED_MODULE_5__.firestore.collection(...).doc(...).where is not a function
【问题讨论】:
-
我相信您使用的 FieldValue 错误。如果您的 firestore 变量类似于
const firestore = firebase.firestore(),那么您不能在更新部分的 FieldValue 中使用 firestore。您将不得不使用stocks: firebase.firestore.FieldValue.increment(-1) -
@SulmanAzhar 我仍然遇到同样的错误
-
还要确认
.where(selectedItem, "==", selectedItem)是否为有效语句。例如,它正在检查字段itemName的值itemName。也许分享您文档的屏幕截图,以便我们确认您是否需要。 -
@Dharmaraj 我添加了文档的屏幕截图。谢谢
-
@Jenn 这似乎是另一个问题。如果您尝试减少项目为
item1的文档字段,则将其更改为:.where("item", "==", selectedItem)除此之外,我的回答中还提到了其他问题
标签: javascript reactjs firebase google-cloud-firestore