Update fields in nested objects in firestore documents?

18,596

Solution 1

According to the link you provided, it says this:

If your document contains nested objects, you can use "dot notation" to reference nested fields within the document when you call update():

Therefore you need to use dot notation to be able to update only one field without overwriting, so like this:

var setAda = dbFirestore.collection('users').doc('alovelace').update({
    "first.test": "12345"
});

then you will have:

 first
  test: "12345"
  test2: "abcd"

Solution 2

Peter's solution's great, but it's not works with dynamic key. Following code can works with it:

var nestedkey = 'test';
var setAda = dbFirestore.collection('users').doc('alovelace').update({
    [`first.${nestedkey}`]: "12345"
});

Solution 3

In case somebody is using TypeScript (like in Cloud functions for example) here is the code to update nested fields with dot notation.

var setAda = dbFirestore.collection('users').doc('alovelace').update({
    `first.${variableIfNedded}.test`: "12345"
});

Solution 4

If you don't want an exception that occur if 'first' field doesn't exist, try using set with {merge: true} option instead of update.

var setAda = dbFirestore.collection('users').doc('alovelace').set({
        first : {
            test: "12345"
        }
}, {merge: true});

Solution 5

Try this one: Does it work like that?

var setAda = dbFirestore.collection('users').doc('alovelace').update({
        "first.test" : "12345"
});
Share:
18,596
TccHtnn
Author by

TccHtnn

Updated on June 11, 2022

Comments

  • TccHtnn
    TccHtnn about 2 years

    I have a data structure like:

    enter image description here

    I want to edit the value of "test" key in "first" object. I followed the document on https://firebase.google.com/docs/firestore/manage-data/add-data

    But it did not work for me.

    The nodejs code:

    var setAda = dbFirestore.collection('users').doc('alovelace').update({
            first : {
                test: "12345"
                }
    });
    

    The result in firestore: enter image description here

    The "test2" key was gone. However, I only want to update the value of "test" and keep the "test2".

    Any solution for this problem?