6

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                                                  
            } ]
        } ]
    } ]
}
4

1 に答える 1

10

残念ながら、現時点では、更新ごとに 1 つの「$」位置指定しか使用できません。これにより、ドキュメントの例と同様に、更新が単一の埋め込み配列に制限されます: http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator (投稿から、既にこれを見つけましたが、この投稿を読んでいる他のユーザーのためにリンクを含めました.)

更新を行うには、次の 3 つのうち 2 つの位置を知る必要があります。「bands」配列内のバンドの位置、albums 配列内のアルバムの位置、またはトラックの位置。 「トラック」配列で。

この機能には機能要求があり、バージョン 2.3.0 が予定されています (ただし、これは変更される可能性があります)。
https://jira.mongodb.org/browse/SERVER-831「ネストされた配列に一致する位置演算子」

とりあえず、3 つの配列のうち 2 つのサブ文書の位置を知る必要があります。

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 に答える