Manuel
Manuel

Reputation: 474

Modify an element of an array inside an object in MongoDB

I have some documents like this:

doc = {
    "tag"   : "tag1",
    "field" : {
        "zone" :"zone1",
        "arr"  : [ 
            { vals: [-12.3,-1,0],     timestamp: ""},
            { vals: [-30.40,-23.2,0], timestamp: "" }
        ]
    }
}

I want to modify one of the elements of the array (for example, the first element, the one with index 0) of one of such documents.

I want to end it up looking like:

doc = {
    "tag"   : "tag1",
    "field" : {
        "zone" :"zone1",
        "arr"  : [ 
            { vals: [-1, -1, -1],       timestamp: "the_new_timestamp"},  // this one was modified
            { vals: [-30.40, -23.2, 0], timestamp: "" }
        ]
    }
}

I know something about find_and_modify:

db.mycollection.find_and_modify(
    query  = query,  // you find the document of interest with this
    fields = {  },  // you can focus on one of the fields of your document with this
    update = { "$set": data }, // you update your data with this
)

The questions that feel closer to what I want are these:

I've been going through them but I'm getting stuck when trying to work out the solution for my case. I don't know if I should really use the fields parameter. I don't know how to use $set correctly for my case.

I hope you could help me.

Upvotes: 1

Views: 373

Answers (1)

Breno Alberto
Breno Alberto

Reputation: 36

https://docs.mongodb.com/manual/reference/operator/update/positional/

This will help you!

db.mycollection.updateOne(
   query,
   fields,
   { $set: { "field.arr.0.timestamp": "the_new_timestamp"} }
)

Upvotes: 2

Related Questions