복붙노트

[MONGODB] MongoDB를 업데이트 깊은 배열

MONGODB

MongoDB를 업데이트 깊은 배열

내 몽고 데이터베이스라는 이름의 음악에서 다음 개체가 있습니다. 장르는 그런 지 어디를 업데이트 할 밴드 이름은 너바나입니다 앨범 이름은 신경 끄시입니다 트랙 순서 1

와 "냄새처럼 틴 스피릿!"에 트랙의 이름을 변경합니다. 나는 위치 연산자와 함께 연주했지만, 한 수 없습니다 꽤 이 밖으로 그림.

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

해결법

  1. ==============================

    1.불행하게도, 현재는 하나의 "$"위치에 따라 업데이트를 사용하는 경우에만 가능하다. 이 설명서의 예와 유사 하나의 내장 배열에 업데이트를, 제한 : http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator (게시물에서, 당신이 이미 발견했지만, 나는이 글을 읽는 다른 사용자의 이익을 위해 링크를 포함 한 것 같습니다.)

    불행하게도, 현재는 하나의 "$"위치에 따라 업데이트를 사용하는 경우에만 가능하다. 이 설명서의 예와 유사 하나의 내장 배열에 업데이트를, 제한 : 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!"}})
    

    또는

    db.music.update({genre : "Grunge", "bands.0.albums.0.tracks.order" : 1}, {$set:{"bands.0.albums.0.tracks.$.name":"Smells Like Teen Spirit!"}})
    
  2. from https://stackoverflow.com/questions/10341151/mongodb-update-deep-array by cc-by-sa and MIT license