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'로 바뀌게 됨