【发布时间】:2019-02-13 07:07:31
【问题描述】:
如何更新文档嵌套对象中的字段?文档中指出了点表示法,但是如何使用变量作为对象名称来实现更新?
结构如下:collection("fruits").doc("as867f56asd")
name: "banana"
abc-variable:
description:"blah"
qty: 1
我想更新文档as867f56asd的abc-variable.qty = 2
我的 JavaScript 需要使用一个变量作为对象名称。
我不知道更新的括号表示法。 .set{merge:true} 需要吗?
这是我到目前为止尝试过的代码(粗略粘贴):
qty = evt.target.value;
//create a string
var obj = firebase.firestore.FieldPath(item).quantity;
//str = item + '.quantity';
//obj[str] = qty;
// var myUpdate = {};
// myUpdate['${item}.quantity'] = qty;
//var obj = [item]["quantity:"] = qty;
console.log("item is " + item);
//var obj = {"'" + item + "'.quantity" : qty};
//obj[item]["quantity"] = qty;
console.log("qty is " + qty);
orderRef.update (
{obj:2}
//{"quantity":qty}
//[item + '.quantity']: qty
//[`favorites.${key}.color`] = true
// ['${item}.quantity'] : qty
//[`hello.${world}`]:
//{[objname]}.value = 'value';
//['favorites.' + key + '.color']: true
//[item]["quantity"] = qty // err:reqd 2 args
//item["quantity"] = qty
//"favorites.color": "Red"
//{"`item`.quantity": qty}
//{"quantity":qty}
)
【问题讨论】:
-
嘿罗恩。你能展示你试过的代码吗?我想你正在寻找类似
values[abc-variable+".qty"] = 2的东西,但如果我看到你已经做了什么,就更容易回答了。 -
在
.update(IDE 中说values未定义。如果我将它包装在{}中,它会显示Unexpected token [。如果我在更新之前声明values = {},IDE 会接受它并通过 linting 但浏览器控制台会抛出错误Uncaught TypeError: Cannot read property 'quantity' of undefinedDoing:orderRef.update (values[item+".quantity"] = qty) -
@FrankvanPuffelen 看来我需要确定一种对该字段(它是一个对象)的引用类型,然后从那里更新一个特定的属性。
FieldPath甚至使用 URLencoding\fruits\abc-123doc\obj-field-var定义引用,但我无法弄清楚。我打算放弃并重新编写整个文档以更新单个字段。我知道这行得通... -
这个
myUpdate['${item}.quantity'] = qty;应该是myUpdate[`${item}.quantity`] = qty;。所以在字符串周围加上反引号,因为这是字符串插值的 JavaScript 语法。 -
您提供的代码中的
item是什么?
标签: javascript firebase google-cloud-firestore