복붙노트

[MONGODB] 어떻게 MongoDB를 내부 목록에 요소를 삽입?

MONGODB

어떻게 MongoDB를 내부 목록에 요소를 삽입?

나는 MongoDB를에 저장된 다음 문서를 가지고 :

{
    name: 'myDoc',
    list: [
        {
            id:1
            items:[
                {id:1, name:'item1'},
                {id:2, name:'item2'}
            ]
        },
        {
            id:2
            items:[
                {id:1, name:'item1'},
                {id:3, name:'item3'}
            ]
        }
    ]
}

나는 $ addToSet를 사용하여 '목록'에 요소를 추가하는 방법을 발견하지만 난 '항목'항목의 특정 목록에 추가 할 수있는 방법을 찾을 수 없습니다.

예를 들면 나는 다음을 얻을 :

{id:5, name:'item5'} 

2 : 나는 ID로 목록에서 요소의 항목에 추가 할 수 있습니다.

해결법

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

    1.$ 누르는 것 그 일을하는 한 가지 방법 :

    $ 누르는 것 그 일을하는 한 가지 방법 :

    db.col.update(
        { name: 'doc', 'list.id': 2 }, 
        {$push: {'list.$.items': {id: 5, name: 'item5'}}}
    )
    

    http://docs.mongodb.org/manual/reference/operator/push/

    또한 같은 다른 사업자와 $ 푸시를 대체 할 수있다 (아마도) $ addToSet 당신이 찾고있는 정확한 결과를 얻을 수 있습니다.

  2. ==============================

    2.당신은이를 사용할 수 있습니다 -

    당신은이를 사용할 수 있습니다 -

    > var toInsert = {id: 5, name: 'item6'}
    > db.abc.update(
                { name: 'myDoc', list: { $elemMatch: { id: 2 } } },
                { $addToSet: { 'list.$.items': toInsert } }
      )
    

    쿼리 부분은 2. 그런 다음 우리가 배열 인덱스에 새로운 요소를 추가 $ 위치 요소를 사용 = ID로 목록 배열에서 문서를 찾을 수 있습니다.

    위치 $ 연산자를 참조하십시오

    {$ elemMatch : {ID : 2}} 또한 목록을 대체 할 수 2 단지 'list.id'와.

    당신이 당신의 배열의 여러 요소를 기반으로 업데이트 할 때 $ elemMatch을 사용하면 더 좋을 것이다. 예를 들어, 귀하의 키워드와 일치하는 배열의 말 길이의 ID와 일부 다른 필드 인 경우 경우 : -

    list: {$elemMatch: {id: 2, length: 5}}
    
  3. from https://stackoverflow.com/questions/13987365/how-to-insert-an-element-to-mongodb-internal-list by cc-by-sa and MIT license