복붙노트

[MONGODB] MongoDB를 통해 몽고 쉘에서 중첩 된 배열을 업데이트 [중복]

MONGODB

MongoDB를 통해 몽고 쉘에서 중첩 된 배열을 업데이트 [중복]

MongoDB의 문서는 다음과 같은 :

{
    "_id" : 2,
    "mem_id" : M002,
    "email" : "xyz@gmail.com",
    "event_type" : [ 
        {
            "name" : "MT",
            "count" : 1,
            "language" : [ 
                {
                    "name" : "English",
                    "count" : 1,
                    "genre" : [ 
                        {
                            "name" : "Action",
                            "count" : 6
                        }, 
                        {
                            "name" : "Sci-Fi",
                            "count" : 3
                        }
                    ],
                    "cast" : [ 
                        {
                            "name" : "Sam Wortington",
                            "count" : 2
                        }, 
                        {
                            "name" : "Bruce Willis",
                            "count" : 4
                        }, 
                        {
                            "name" : "Will Smith",
                            "count" : 7
                        }, 
                        {
                            "name" : "Irfan Khan",
                            "count" : 1
                        }
                    ]
                }
            ]
        }
    ]
}

나는 형의 배열, 특별히 EVENT_TYPE, 언어, 장르 때문에 중첩 캐스트입니다 필드를 업데이트 할 수 없습니다입니다. 기본적으로, 각각의 하위 문서에 대한 카운트 필드와 함께 4 개 개의 모든 언급 한 필드를 업데이트하고 싶었다. 값이이 값의 수를 증가해야 새로운 다른 경우 업데이트 문은 나무에 값을 삽입해야합니다. 몽고 쉘에서 쿼리 무엇을 할 수 있습니까? 감사

해결법

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

    1.직접 MongoDB를 현재의 한계를 때리고있다. 문제는 엔진이 여러 위치 연산자를 지원하지 않는다는 것입니다. 중첩 된 배열을 업데이트 할 수있는 위치`$ '연산자의 다중 사용을 참조하십시오

    직접 MongoDB를 현재의 한계를 때리고있다. 문제는 엔진이 여러 위치 연산자를 지원하지 않는다는 것입니다. 중첩 된 배열을 업데이트 할 수있는 위치`$ '연산자의 다중 사용을 참조하십시오

    (이 또한 언급) https://jira.mongodb.org/browse/SERVER-831이를위한 오픈 티켓이 있습니다

    또한 데이터 모델을 변경하는 방법에 대한이 하나를 읽을 수 있습니다하여 MongoDB의 중첩 배열 업데이트

    당신을 위해 가능한 경우, 당신은 할 수 있습니다 :

    db.collection.update({_id:2,"event_type.name":'MT' ,"event_type.language.name":'English'},{$set:{"event_type.0.language.$.count":<number>}})
    
    db.collection.update({_id:2,"event_type.name":'MT' ,"event_type.language.name":'English'},{$set:{"event_type.$.language.0.count":<number>}})
    

    하지만 당신은 할 수 없습니다

    db.collection.update({_id:2,"event_type.name":'MT' ,"event_type.language.name":'English'},{$set:{"event_type.$.language.$.count":<number>}})
    
  2. ==============================

    2.경우로하자 걸릴 경우 :

    경우로하자 걸릴 경우 :

    이 명령은 MT에서 GMT에 EVENT_TYPE 목록 내부 객체의 이름을 업데이트합니다 :

    BEFORE:
    db.testnested.find({}, {"event_type.name" : 1})
    { "_id" : 2, "event_type" : [ { "name" : "MT" } ] }
    AFTER:
    db.testnested.find({}, {"event_type.name" : 1})
    { "_id" : 2, "event_type" : [ { "name" : "GMT" } ] }
    

    인턴 목록입니다 같은 언어, 장르 EVENT_TYPE 내부 2.To 업데이트 필드 : 이것에 대한 직접 쿼리가 없습니다. 그런 다음 자바 스크립트 또는 원하는 언어 등을 사용하여 문서) (저장 같은 것을 문서 읽기, 업데이트 할 필요가있다. 나는 다른 방법으로는 몽고 2.4까지 사용할 수 있다고 생각 해달라고

    추가 문서에 대해서는, 저장 참조 할 수 있습니다 ().

    감사!

  3. from https://stackoverflow.com/questions/18573117/updating-nested-arrays-in-mongodb-via-mongo-shell by cc-by-sa and MIT license