I am trying to update an object into an array in MongoDB.
Here are my documents :
> db.devis.insert({id:1,obj:[{'code':'A'},{'code':'B'}]})
> db.devis.insert({id:2,obj:[{'code':'C'},{'code':'D'}]})
> db.devis.find()
[
{
id: 1,
obj: [ { code: 'A' }, { code: 'B' } ]
},
{
id: 2,
obj: [ { code: 'C'}, { code: 'D' } ]
}
]
I select the document with the code 'B'.
I can add one field with this command :
> db.devis.update({'obj.code':'B'},{$set: {'obj.$.a':'a'}})
# Result
{
id: 1,
obj: [ { code: 'A'}, { code: 'B', a: 'a'} ]
}
Now I want to add several fields :
> var = {'foo':'foo', 'bar':'bar'}
> db.devis.update({'obj.code':'B'},{$set: {'obj.$': var}})
# Result
{
id: 1,
obj: [ { code: 'A'}, { foo: 'foo', bar: 'bar'} ]
}
# What I want
{
id: 1,
obj: [ { code: 'A'}, { code: 'B', foo: 'foo', bar: 'bar'} ]
}
The object is overwritten.
It is possible to insert in it several fields from a variable ?
codebut get rid ofaand addfooandbar?awas just an example to add one field, @J.F. answered exactly what I was looking for.