MongoDB – обновление объекта в вложенном массиве

{ "_id" : "xPBc4By8FemDwTPqH", "u" : { "_id" : "6PoZawHZcQz4Gwzcv", "username" : "michael" }, "friends" : [ { "u" : { "_id" : "eGqDjAjjtYADbuSnn", "username" : "michael", "name" : "michael" } }, { "u" : { "_id" : "k4gKCGwYryXDMMHvs", "username" : "joyce", "name" : "joyce" } } ] } 

Я хочу обновить имя «friends.u.username»: имя «michael» «привет», как мне это нужно.

Примените оператор $set вместе с оператором $ positional в вашем обновлении, чтобы изменить поле name .

Оператор $ positional идентифицирует правильный элемент в массиве для обновления без явного указания позиции элемента в массиве, поэтому ваш окончательный оператор обновления должен выглядеть так:

 db.collection.update( { "friends.u.username": "michael" }, { "$set": { "friends.$.u.name": "hello" } } ) 

Вы можете использовать оператор $ set.

 > db.test.update({"friends.u._id":"eGqDjAjjtYADbuSnn"},{$set:{"friends.$.u.name":"hello"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 
Давайте будем гением компьютера.