Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

282
Views
Firestore - Does the dot notation work with set()?

I am trying to run this code:

function updateUserLimitations(userId, limitations, batchOrTransaction = undefined) {
  const userLimitationsRef = firestore
    .collection("users")
    .doc(userId)
    .collection("limitations")
    .doc("userLimitations");

  if (batchOrTransaction) {
    return batchOrTransaction.set(
      userLimitationsRef,
      limitations,
      { merge: true }
    );
  }

  return userLimitationsRef.set(limitations, { merge: true });
}

updateUserLimitations(userId, { "messages.totalMessages": admin.firestore.FieldValue.increment(1) });

But...

Instead of getting this doc data in my db:

{ // Doc data
   messages: {
      initialDate: timestamp, // Date of the first message (I need to preserve it),
      totalMessages: 20,
   },
}

I am getting:

{
   ...other doc data...,
   messages.totalMessages: 20,
}

I need the set with the merge option, because I am updating and creating if the doc doesn't exist....

Any ideas? Am I doing something wrong here?

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

You can use an object for "setting" nested data:

{
  messages: {
    totalMessages: 20,
  }
}

The "dot" notation is for applying updates to nested data.

about 4 years ago · Juan Pablo Isaza Report

0

If you need only to update, then use the update() function instead of set(). So please change the following line of code:

return userLimitationsRef.set(limitations, { merge: true });

To:

return userLimitationsRef.update(limitations);

And your:

updateUserLimitations(userId, { "messages.totalMessages": admin.firestore.FieldValue.increment(1) });

It will work as expected. If you want to add if it doesn't exist, then you should indeed use the set() function.

about 4 years ago · Juan Pablo Isaza Report

0

With my current implementation

function updateUserLimitations(userId, limitations, batchOrTransaction = undefined) {
  const userLimitationsRef = firestore
    .collection("users")
    .doc(userId)
    .collection("limitations")
    .doc("userLimitations");

  if (batchOrTransaction) {
    return batchOrTransaction.set(
      userLimitationsRef,
      limitations,
      { merge: true }
    );
  }

  return userLimitationsRef.set(limitations, { merge: true });
}

I can deeply update the document messages field too, as follows:

updateUserLimitations(
   userId,
   { 
      messages: {
        totalMessages: admin.firestore.FieldValue.increment(1),
      }
   }
);

It preserves all the previous existing object fields and updates the specific one.

{ // Doc data
  messages: {
    initialDate: timestamp, // PRESERVED!
    totalMessages: 21,
  },
}
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!