Can I use something like findAndModify on a deep nested document with MongoDB? -
i have collection contexts documents following in mongodb (a context has users roles)
{ "__v" : 0, "_id" : objectid("53dea71a713d636e1fea705a"), "name" : "team4", "users" : [ { "userid" : "53a347467f311d7c1731f91b", "roles" : [ "admin" ] }, { "userid" : "536d2e8be0f9697e13b95c87", "roles" : [] } ] }
is there way add (or remove) role user findandmodify.
yes, it's possible. can using both update , findandmodify commands.
to add role user call:
db.contexts.update({ _id: objectid('53dea71a713d636e1fea705a'), 'users.userid': '536d2e8be0f9697e13b95c87' }, { $push: { 'users.$.roles': 'admin' } })
to remove role user call:
db.contexts.update({ _id: objectid('53dea71a713d636e1fea705a'), 'users.userid': '53a347467f311d7c1731f91b' }, { $pull: { 'users.$.roles': 'admin' } })
note i'm using positional operator $
specify exact user
subdocument update.
here example of using findandmodify
same task:
db.contexts.findandmodify({ query: { _id: objectid('53dea71a713d636e1fea705a'), 'users.userid': '536d2e8be0f9697e13b95c87' }, update: { $push: { 'users.$.roles': 'admin' } }, new: true })
the real difference between update
, findandmodify
commands findandmodify
returns modified document, while update
returns operation status.
findandmodify
operation equivalent of calling both find
, update
operations, except findandmodify
performs both operations in single transaction. more information see this question.
Comments
Post a Comment