MongoDB中精确元素数组中的更新字段

MongoDB中精确元素数组中的更新字段

我有一个这样的文档:

{
    _id:"43434",
    heroes : [
        { nickname : "test",  items : ["", "", ""] },
        { nickname : "test2", items : ["", "", ""] },
    ]}

我能$set类的第二个元素。items数组中嵌入对象的数组。heros带着nickname "test" ?

结果:

{
    _id:"43434",
    heroes : [
        { nickname : "test",  items : ["", "new_value", ""] }, // modified here
        { nickname : "test2", items : ["", "", ""] },
    ]}


汪汪一只猫
浏览 3116回答 3
3回答

白猪掌柜的

您需要使用两个概念:MongoDB位置算子并简单地为要更新的条目使用数字索引。位置运算符允许您使用如下条件:{"heros.nickname":&nbsp;"test"}然后引用已找到的数组条目,如下所示:{"heros.$&nbsp;&nbsp;//&nbsp;<-&nbsp;the&nbsp;dollar&nbsp;represents&nbsp;the&nbsp;first&nbsp;matching&nbsp;array&nbsp;key&nbsp;index因为您想要更新“Item”中的第二个数组条目,而数组键是0索引-这是键1。因此:>&nbsp;db.denis.insert({_id:"43434",&nbsp;heros&nbsp;:&nbsp;[{&nbsp;nickname&nbsp;:&nbsp;"test",&nbsp;&nbsp;items&nbsp;:&nbsp;["",&nbsp;"",&nbsp;""]&nbsp;},&nbsp;{&nbsp;nickname&nbsp;:&nbsp;"test2",&nbsp;items&nbsp;:&nbsp;["",&nbsp;"",&nbsp;""]&nbsp;}]}); >&nbsp;db.denis.update( &nbsp;&nbsp;&nbsp;&nbsp;{"heros.nickname":&nbsp;"test"},&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{$set:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"heros.$.items.1":&nbsp;"new_value" &nbsp;&nbsp;&nbsp;&nbsp;}})>&nbsp;db.denis.find(){ &nbsp;&nbsp;&nbsp;&nbsp;"_id"&nbsp;:&nbsp;"43434",&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;"heros"&nbsp;:&nbsp;[ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{"nickname"&nbsp;:&nbsp;"test",&nbsp;"items"&nbsp;:&nbsp;["",&nbsp;"new_value",&nbsp;""&nbsp;]}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{"nickname"&nbsp;:&nbsp;"test2",&nbsp;"items"&nbsp;:&nbsp;["",&nbsp;"",&nbsp;""&nbsp;]} &nbsp;&nbsp;&nbsp;&nbsp;]}

杨魅力

db.collection.update({heroes:{$elemMatch:{&nbsp;"nickname"&nbsp;:&nbsp;"test"}}}, &nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$push:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'heroes.$.items':&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$each:&nbsp;["new_value"&nbsp;], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$position:&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MongoDB