programing

요소를 MongoDB 내부 목록에 삽입하는 방법은 무엇입니까?

stoneblock 2023. 5. 14. 10:05

요소를 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'} 

그리고 나는 그것을 id:2로 목록에 있는 요소의 항목에 추가하고 싶습니다.

한 가지 방법은 다음과 같습니다.$push:

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

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

교체할 수도 있습니다.$push(계속)과 같은 다른 연산자와 함께.$addToSet찾고 있는 것과 유사한 결과를 얻을 수 있습니다.가장 큰 차이점은$push새 요소를 목록에 추가하는 반면,$addToSet요소가 없는 경우 요소를 추가합니다(유일한 요소 집합).

사용할 수 있습니다.

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

query부품이 문서를 찾을 것입니다.list와 일치하는.id = 2그러면 우리는$위치 요소 - 해당 배열 인덱스에 새 요소를 추가합니다.

참조


교체할 수도 있습니다.list: {$elemMatch: {id: 2}}정당하게'list.id': 2.

그러나 어레이의 여러 요소를 기반으로 업데이트하려면 를 사용하는 것이 더 좋습니다.예를 들어, 일치 기준이 다음과 같은 경우id그리고 배열의 다른 분야는 말합니다.length: -

list: {$elemMatch: {id: 2, length: 5}}

언급URL : https://stackoverflow.com/questions/13987365/how-to-insert-an-element-to-mongodb-internal-list