javascript - Firestore:更新嵌套对象中的字段

标签 javascript firebase google-cloud-firestore

如何更新文档的嵌套对象中的字段?文档中使用点符号表示,但是如何使用变量作为对象名称来实现更新?

结构就像:collection("fruits").doc("as867f56asd")

name: "banana"
abc-variable: 
    description:"blah"
    qty: 1

我想更新文档as867f56asdabc-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}
)

最佳答案

如果您要进行更新:

let qty = 2
orderRef.update({"abc-variable.qty": qty});

但是,如果abc-variable是变量的值,则可以执行以下操作:
let qty = 2
let variable = "abc-variable";
var values = {};
values[variable] = qty;
orderRef.update(values);

更新

此代码仅更新收藏夹:
var variableObjectName = "favorites";
var qty = Date.now(); // just so it changes every time we run
var field = {quantity:qty};
var obj = {};
obj[variableObjectName] = field; 
ref.update(obj);

它不会删除文档上的任何其他属性。

更新2

要更新嵌套对象中的单个字段,请使用.寻址该字段:
ref.update({ "favorites.quantity": Date.now() });

参见documentation on how to update fields in nested objects

更新3

要对名称存储在变量中的字段执行深度更新:
var name = "favorites";
var update = {};
update[name+".quantity"] = Date.now();
ref.update(update);

再次显示在:https://jsbin.com/wileqo/edit?js,console

关于javascript - Firestore:更新嵌套对象中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52230832/

相关文章:

javascript - 如何将控制台错误显示为验证错误?

javascript - 如何从对象数组的多个键中获取所有值?

json - firebase 设置失败的第一个参数在属性中包含未定义

version-control - 如何在 Firebase 上实现版本控制?

javascript - 具有更新和创建的时间戳的 Google Firestore

android - Android Kotlin 代码运行时出现 "Accessing hidden field"错误

javascript - 修复 iOS 上的悬停行为

javascript - 在yii controller中注册css和js是不是更好?

Android - FirebaseApp/Firebase 初始化未启动

java - Firestore-检查用户名是否已存在