我在名为music的mongo数据库中有以下对象.
我想更新类型是哪里Grunge
乐队名称是Nirvana
专辑名称是Nevermind
音轨顺序是1
并将曲目的名称改为"Smells Like Teen Spirit!".
我已经尝试过使用位置运算符,但无法弄清楚这一点.
{
genre : "Grunge",
bands : [ {
name : "Nirvana",
albums : [ {
name : "Nevermind",
tracks : [ {
name : "Smell Like Teen Spirit",
order : 1,
duration : 301
},
{
name : "In Bloom",
order : 2,
duration : 254
} ]
},
{
name : "In Utero",
tracks : [ {
name : "Server the Servants",
order : 1,
duration : 216
},
{
name : "Scentless Apprentice",
order : 2,
duration : 254
} ]
} ]
},
{
name : "Karma++ : A Nirvina Tribute Band",
albums : [ {
name : "Nevermind",
tracks : [ {
name : "Smell Like Teen Spirit",
order : 1,
duration : 301
},
{
name : "In Bloom",
order : 2,
duration : 254
} ]
},
{
name : "In Utero",
tracks : [ {
name : "Server the Servants",
order : 1,
duration : 216
},
{
name : "Scentless Apprentice",
order : 2,
duration : 254
} ]
} ]
} ]
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,目前每次更新只能使用一个"$"位置.这将更新限制为单个嵌入式阵列,类似于文档中的示例:http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator (从您的帖子看,它看起来像您已经发现了这个,但我已经包含了链接,以便其他用户阅读这篇文章.)
为了进行更新,您必须知道以下三个中的两个位置:乐队在"乐队"数组中的位置,专辑在专辑阵列中的位置或者曲目的位置在"轨道"数组中.
此功能有一个功能请求,它适用于版本2.3.0(虽然这可能会有所变化).
https://jira.mongodb.org/browse/SERVER-831 "位置运算符匹配嵌套数组"
目前,您必须知道子文档在三个数组中的两个中的位置:
db.music.update({genre : "Grunge", "bands.name" : "Nirvana"}, {$set:{"bands.$.albums.0.tracks.0.name":"Smells Like Teen Spirit!"}})
db.music.update({genre : "Grunge", "bands.0.albums.name" : "Nevermind"}, {$set:{"bands.0.albums.$.tracks.0.name":"Smells Like Teen Spirit!"}})
Run Code Online (Sandbox Code Playgroud)
要么
db.music.update({genre : "Grunge", "bands.0.albums.0.tracks.order" : 1}, {$set:{"bands.0.albums.0.tracks.$.name":"Smells Like Teen Spirit!"}})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4976 次 |
最近记录: |