6

我的 mongo 数据库中有以下名为 music 的对象。

我想更新流派是 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                                                  
            } ]
        } ]
    } ]
}
4

1 回答 1

10

不幸的是,目前每次更新只能使用一个“$”位置。这将更新限制为单个嵌入式数组,类似于文档中的示例:http ://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator (从您的帖子看来,您已经找到了这个,但我已经包含了链接,以方便其他阅读这篇文章的用户。)

为了进行更新,您必须知道以下三个中两个的位置:乐队在“bands”数组中的位置、专辑在专辑数组中的位置或曲目的位置在“轨道”数组中。

此功能有一个功能请求,它计划在 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!"}})

或者

db.music.update({genre : "Grunge", "bands.0.albums.0.tracks.order" : 1}, {$set:{"bands.0.albums.0.tracks.$.name":"Smells Like Teen Spirit!"}})
于 2012-04-26T21:48:19.227 回答