TIL,WIL(일간,주간 회고)

[TIL] mongoose(몽고디비) dot notation, filtered positional operator

worldint 2023. 10. 25. 18:59

dot notation

몽고 디비의 dot notation이란

중첩된 객체의 필드를 참조할 때 사용한다

viewCount 배열이 아래와 같음

viewCout: [ 

{site:’hihi’, count:21},

{site:’aaaa, count:21},

{site:’bbbb, count:21},

]
findOneAndUpdate( {_id': id, 'viewCount.site': ‘hihi’ },{//여기 update query })

여기서 viewCount.site가 dot notation을 사용한 부분인데 (그냥 점 말하는 듯)

따라서 위 쿼리는 _id:가 id이고 site가 ‘hihi’인 문서를 찾아서 update하는 쿼리이다

filtered positional operator

$[elem]이렇게 사용하는것 이고 elem부분은 원하는 문자열 아무거나 가능

findOneAndUpdate(
    {
    	//findQuery
    },
    {
    	$set:{ 'student.$[e1].name': 'david'}
    },
    {
    	arrayFilters: [{ 'e1._id': 3 }],
    }       
)

 

위 코드는

1. findQuery로 document를 찾고

2. 그 다규먼트의 student 배열필드중  하나의 요소의 name를 'david'로 바꾸라는 명령이다

3. 어떤 요소를 찾을 것인지는 `arrayFilters`를 통해서 필터링한다
여기서는 _id가 3인 요소
즉 

{
	student:[
    	{
            _id:1,
            name:"aaa"
        },
        {
             _id:2
             name:"bbb"             
        },
        {
             _id:3
             name:"ccc"
        }
	]
}

여기서 'ccc'를 'david'로 바뀌게 됨