javascript - 使用本机反应减少firebase中的值
问题描述
当单击按钮时,我正在尝试减少 Firebase 实时数据库中的 Quantity 值。但是,我尝试了多种方法仍然无法减少该值。下面列出的是结构的样子。
const database = [
{
Name: "Coca Cola",
Price: "1.75",
Quantity: "66",
},
{
Name: "HaagenDaz",
Price: "3.99",
Quantity: "5",
},
{
Name: "Trident",
Price: "1.85",
Quantity: "10",
},
{
Name: "kitkat",
Price: "1.20",
Quantity: "100",
},
];
我用来将 Trident 的 Quantity 值减少到 9 的方法之一是: Quantity: firebase.firestore.FieldValue.increment(-1)
结果是:
{
"Name": "Trident",
"Price": "1.85",
"Quantity": {
"d_": {
"J_": -1,
"_methodName": "FieldValue.increment"
}
}
}
预期的结果应该是:
{
Name: "Trident",
Price: "1.85",
Quantity: "9"
}
我在下面发布了代码:
Object.values(this.state.mylist).map((key) => {
const target = key;
const string = this.state.paredString;
console.log("Quantity:", target.Quantity);
// const ref_forUpdate = firebase.database().ref("Product Name");
// const decrement = firebase.firestore.FieldValue.increment(-1);
const name = target.Name;
const qty = target.Quantity;
// const decrement = firebase.firestore.FieldValue.increment(-1);
for (let i = 0; i < string.length; i++) {
if (target.Name == string[i]) {
// let temp = target.Quantity
firebase
.database()
.ref("Product Name/" + name)
.update({
// Quantity: firebase.firestore.FieldValue.increment(-1) //<------ creates a new sub-branch under Quantity
// Quantity: qty - 1 , <------ Quantity in realtime database keeps decreasing without stopping
});
console.log("Matched:", target);
} else {
console.log("Not_matched2");
}
}
console.log("\n");
});
解决方案
您正在使用 Firestore 的运算符,但正在写入实时数据库。虽然这两个数据库都是 Firebase 的一部分,并且都支持原子增量/减量,但 API 是不同的。
对于实时数据库,该字段名为ServerValue.increment()
,因此:
firebase.database().ref("Product Name/" + name).update({
Quantity: ServerValue.increment(-1)
})
推荐阅读
- python - Pandas 根据条件过滤行,但始终保留第一行
- r - R 版本的 Vlookup,每个单元格有多个匹配项
- python - 如果前一组中存在,则删除行
- java - 当我们想要使用 map.get(key).wait() 时,当值是 AtomicLong 时同步 map.get(key) 真的有意义吗?
- javascript - eslint 动态改变文件列表
- sqlite - 使用存储在变量中的索引位置选择 SQLite3 数据
- javascript - 需要帮助以递归方式遍历 Javascript 对象的所有级别
- ajax - 为什么 if 条件不过滤结果?
- npm - 内部/模块/cjs/loader.js:584 问题
- clang - CXXRecordDecl 与子 VarDecl?