mongodb - Change an existing object in an array but still preserve key uniqueness -
mongodb - Change an existing object in an array but still preserve key uniqueness -
i have document:
class="lang-js prettyprint-override">{ 'profile_set' : [ { 'name' : 'nick', 'options' : 0 }, { 'name' : 'joe', 'options' : 2 }, { 'name' : 'burt', 'options' : 1 } ] }
if want add new object profile_set
only if name
of object isn't taken, regardless of options
, can qualify update
query object prevents update if name
nowadays in profile_set
. in shell:
db.coll.update( {_id: id, 'profile_set.name': {$ne: 'nick'}}, {$push: {profile_set: {'name': 'nick', 'options': 2}}})
so perform $push
doc matching _id
, there isn't profile_set
element name
'nick'
.
question if later need alter nick's name (and maybe options too...), change existing array object, not add together new one. there way in 1 atomic update operation still honor unique constraint of name
?
there 2 conditions, think:
class="lang-js prettyprint-override">var newname = "somename"; var oldname = "nick"; var newoption = 3; // if not alter name db.coll.update({ _id : id, 'profile_set.name' : oldname }, { $set : { "profile_set.$.options" : newoption } }); // if alter name db.coll.update({ _id : id, $and : [ { 'profile_set.name' : { $ne : newname } }, { 'profile_set.name' : oldname } ] }, { $set : { "profile_set.$.name" : newname, "profile_set.$.options" : newoption } });
mongodb mongodb-query
Comments
Post a Comment