프로그래밍-Web/MongoDB(22)
-
[정리] MongoDB의 Transaction과 session문제
aggregate 쿼리에 session을 달아주지 않아 API가 서로 다른 트랜젝션에서 움직이는 문제가 생겼다. 기존 쿼리가 session객체를 쿼리 옵션에 실어서 주는 반면 aggregation은 전달하는 방법이 조금 다르다. option 메소드를 사용한다. 무튼 이건 그냥 실수. 중요한건 아니고. 트랜잭션은 논리적으로 하나의 작업으로 처리되는 쿼리들의 모음을 말한다 보통 commit과 rollback으로 나뉘어, 변경 후 상태를 유지하며 트랜잭션을 종료하거나, 이상이 있을 경우 이전 상태로 돌려놓은 후 트랜잭션을 종료한다 트랜잭션 과정에서는 '세션'이라는 개념을 사용하는데, 얘는 DB관련 작업을 수행 시작부터 종료까지의 기간을 말한다. 우리가 특정 쿼리를 DB에 보낸다면, DB 접속부터 수행한 후 쿼..
2021.02.25 -
[aggregate] project로 filter 하기
match 전에 사용해도 상관없다 이 예시의 경우는 result를 lookup의 결과물로 받아서, 결과물에 대한 filtering을 위해 dot command를 사용했다
2021.02.24 -
[이슈] 원하는 field만 가져오기
두번째 인자에 원하는 필드 지정해주기
2021.02.24 -
[aggregate] aggregate에서 match시 regex 활용
특정 string이 포함된 document를 찾고싶은 경우 match command의 변수에 regex라는 옵션을 달아준다 그러면 해당 변수로 검색해서 일치하는 모든 도큐먼트를 셀렉트해온다
2021.02.24 -
[이슈] Mongodb의 배열 원소 업데이트
자주 쓰이는 간단한 형태의 쿼리지만 정리 - Document에 대한 속성은 기존대로 표기 - Document의 array element에 대한 속성은 dot command로 표기 - 조금 더 명확한 filter를 위해서는 elemMatch를 사용할 수 있다 - Document에 대한 업데이트는 기존대로 표기 - Document의 array element에 대한 업데이트는 $ expression 표기, 단 이 경우 조건을 만족하는 첫번째 원소만 업데이트 한다 - multi 로 업데이트를 하고 싶은 경우, arrayFilter를 동일하게 두고, multi 옵션을 켜준다. 해당 예시에서는 filter와 update 구문에서 조작하는 필드가 다르므로 사용 가능.
2021.02.24 -
[이슈] nodejs에서 MongoDB document의 Object Id 비교하기
습관적으로 ===을 쓰다가 어이없이 헤맸다.. 결론만 말하면 이렇다 애초에 Mongoose의 objectId는 객체라서 === 로 비교가 불가능하고, 모두 ObjectId 타입으로 바꾸어 equals로 비교해야 한다.
2021.02.23