티스토리 뷰
안녕하세요. 여행의 직구 개발자 jun 입니다.
이번에 몽고 3.6 버전으로 업데이트 되면서 많은 기능이 개편되었는데요.
그 중에서도!! 아주 유용한 배열을 식별자를 통하여 바로 검색하여 업데이트 할 수 있도록 개편이 되었습니다.
3.6 버전 부터 적용 되기 때문에 꼭 몽고DB를 업데이트해주셔야합니다!!
가장 중요한점!!! 3.6 이전에 버전에서 저장되어 있던 db 데이터들 또한 dump파일을 만드시고 몽고DB 3.6 버전이상에서 restore하셔야 사용가능합니다!
그냥 몽고DB 버전만 업데이트하시고 사용하시면 identifier가 적용 안되니 꼭 주의해주시길 바랍니다. ^-^
일단 간단히 예시 부터 보도록 합시다.
공식 문서 : https://docs.mongodb.com/
공식 문서에 있는 예시를 가져와 봤습니다.
[1] 필터를 이용하여 조건에 해당하는 배열값 변경
1) 만약 이러면 students라는 db데이터들이 있다고 생각해봅시다.
{ "_id" : 1, "grades" : [ 95, 92, 90 ] } { "_id" : 2, "grades" : [ 98, 100, 100 ] } { "_id" : 3, "grades" : [ 95, 100, 100 ] }
2) 여기에 있는 db데이터들중에 grades 배열 값중에 100 이상인 값들을 찾아 모두 100점으로 통일을 하고 싶다고 한다면 아래와 같이 작성해주시면 됩니다.
여기서 element 라는 이름은 다른 이름으로 변경하셔도 상관없습니다. 하지만 꼭 arrayFilters 값과 $[] 값은 꼭 똑같이 해주셔야합니다.
students.update( { }, { $set: { "grades.$[element]" : 100 } }, {
arrayFilters: [ { "element": { $gte: 100 } } ] } )
3) 2번이 작동한다면 다음과 같이 db데이터들이 변경됩니다.
{ "_id" : 1, "grades" : [ 95, 92, 90 ] } { "_id" : 2, "grades" : [ 98, 100, 100 ] } { "_id" : 3, "grades" : [ 95, 100, 100 ] }
[2] 필터를 이용하여 배열인의 json값 변경
1) students2라는 db데이터 입니다.
{ "_id" : 1, "grades" : [ { "grade" : 80, "mean" : 75, "std" : 6 }, { "grade" : 85, "mean" : 90, "std" : 4 }, { "grade" : 85, "mean" : 85, "std" : 6 } ] } { "_id" : 2, "grades" : [ { "grade" : 90, "mean" : 75, "std" : 6 }, { "grade" : 87, "mean" : 90, "std" : 3 }, { "grade" : 85, "mean" : 85, "std" : 4 } ] }
2) 이번엔 grade가 85 이상인 값들인 데이터들을 mean 이 100이 되도록 수정한다고 생각합시다.
db.students2.update( { }, { $set: { "grades.$[elem].mean" : 100 } }, { multi: true, arrayFilters: [ { "elem.grade": { $gte: 85 } } ] } )
3) 결과값은 이렀습니다.
{ "_id" : 1, "grades" : [ { "grade" : 80, "mean" : 75, "std" : 6 }, { "grade" : 85, "mean" : 100, "std" : 4 }, { "grade" : 85, "mean" : 100, "std" : 6 } ] } { "_id" : 2, "grades" : [ { "grade" : 90, "mean" : 100, "std" : 6 }, { "grade" : 87, "mean" : 100, "std" : 3 }, { "grade" : 85, "mean" : 100, "std" : 4 } ] }
검색쿼리는 $gte 말고도 $ne, $lte 등등 다 가능합니다.
이번 3.6 버전으로 업데이트 되면서 몽고가 더욱더 편리해졌군요. 넘모 좋군여
상세한 내용을 더 알고 싶으시다면 공식문서를 참고하셔서 더 공부하시면 될것같습니다.
감사합니다 :)
'MongoDB' 카테고리의 다른 글
[mongoDB, nodejs] 효율적인 데이터 리스트 출력 방법! (0) | 2019.12.04 |
---|---|
[mongoDB] local에서 mongo replica set 설정! (0) | 2019.11.26 |
[MongoDB] 검색쿼리 특정 조건 빼고 찾기 (3) | 2018.05.09 |