Firestore: обновление полей во вложенных объектах - PullRequest
0 голосов
/ 08 сентября 2018

Как можно обновить поля во вложенном объекте документа? В документации указаны точечные обозначения, но как добиться обновления с переменной в качестве имени объекта?

Структура как: 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}
)

1 Ответ

0 голосов
/ 08 сентября 2018

Если обновление вы пытаетесь сделать:

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() });

См. документацию по обновлению полей во вложенных объектах .

Обновление 3

Чтобы выполнить глубокое обновление поля, имя которого хранится в переменной:

var name = "favorites";
var update = {};
update[name+".quantity"] = Date.now();
ref.update(update);

Еще раз показано в: https://jsbin.com/wileqo/edit?js,console

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...