15

Lets say I have the following document:

{name: 'myDoc', nestedDoc: {a: 1, b: 2, c: 3}}

And I would like to merge with the nestedDoc a new object:

{b: 20, c:30, d:40}

So the resulting object would be:

{name: 'myDoc', nestedDoc: {a: 1, b: 20, c: 30, d: 40}}

How can I go about doing this in a single query? I feel like I need multiple $set calls however object property names must be unique. In other words, I wish I could do the following:

db.myCollection.update({name: 'myDoc', nestedDoc: {$set: {b: 20}, $set: {c: 30}, $set: {d: 40}}); 

Some extra details are that the MongoDB version is 1.8.2 and I am using the NodeJS node-native driver.

2 Answers 2

35

You can update by using the following:

db.myCollection.update({
    name: 'mydoc'
}, {
    $set: {
        'nestedDoc.b': 20,
        'nestedDoc.c': 30,
        'nestedDoc.d': 40
    }
})

Here is more information about update command:

Sign up to request clarification or add additional context in comments.

Comments

-2

update: this answer is not a correct update!

this works too in my app, and easy to read

db.myCollection.update({
    name: 'mydoc'
   }, 
   {
    $set: {
        nestedDoc:{
           b: 20,
           c: 30,
           d: 40,
       } 
    }
})

1 Comment

This will replace nestedDoc with the contents, not update its fields.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.