문서 갱신
$addToSet 제한자
- $addToSet 제한자는 배열을 집합처럼 처리하여 중복을 피하고, 입력할 수 있음
- "type" 키에는 배열의 형태로 apple banana 값들이 입력되어 있고 $addToSet 제한자를 통해 orange 값을 입력하면, orange 값이 없기 때문에 중복을 피하여 입력됨.
- $each 제한자를 조합하여 고유한 값을 여러 개 추가
- 마지막 update시에 존재하지 않는 strawberry만 갱신된다.
$pop 제한자
- $pop 제한자는 배열의 양쪽 끝에서부터 요소를 하나씩 삭제함
- 값을 1로 부여하면, 배열의 마지막 요소부터 제거
- 값을 -1로 부여하면, 배열의 처음부터 요소를 제거
$pull 제한자
- $pull 제한자는 배열 위치랑 상관 없이 주어진 조건에 맞는 배열 요소를 제거
- $pull 제한자는 배열 요소를 제거하지만, 조건과 일치하는 모든 요소를 제거한다는 주의사항이 있다.
updateMany : 다중 문서 갱신
- updateOne은 필터 조건에 맞는 첫 번째 문서만 갱신한다.
- 조건에 맞는 문서가 더 있더라도 갱신하지 않는데, updateMany를 사용하면 필터에 일치하는 모든 문서를 갱신하게 된다.
쿼리
find()
- find() 함수는 첫 매개변수에 따라 어떤 문서를 가져올지 결정한다.
- 빈 쿼리 문서 ({ })로 지정하면 컬렉션 내 모든 문서를 가져오며, 생략이 가능하다.
- find() 함수를 통해 원하는 필드에 조건을 주어 조회할 순 있지만, 문서 내의 정확한 키/값이 필요 없이 조회하고 싶다면 해당 매개변수에 키의 값을 1로 부여
- 첫 번째 매개변수는 생략하거나 조건을 주어 필히 작성
- 마지막 쿼리를 보면 첫 번쨰 매개변수의 name 키의 값을 "Chang"을 가지는 필터의 조건 부여
- 그리고 두 번째 매개변수의 name 키의 값을 1로 부여하여 name 키와 값을 조회
- _id 키의 값은 지정하지 않아도 항상 반환하기 때문에 0으로 지정하면 제외가 가능하다.
쿼리 조건
- $lt , $ lte , $gt , $gte로 각각 <, <= , > , >=이다.
- 예시 db.people.find( { age : {$gte : 22 , $lte : 30 }} ) = age 키값이 22 이상 30 이하인 문서를 조회해서 보여줘라
- 날짜 값의 쿼리도 가능함.
$ne : Not Equal
- $ne 연산자는 키의 값이 특정 값과 일치하지 않는 문서를 찾을 때 사용
- "name" 키의 값에 $ne 연산자를 통해 "lee" 값을 가진 필드를 제외한 문서를 조회
$in
- $in 연산자는 서로 다른 데이터형에도 사용 가능
- { age : { $in : [25, 22 ] } }처럼 사용하여 age가 25, 22인 모든 문서들을 불러올 수 있다.
$in, $or 조합
- age 값이 25,22 이거나, name 값이 'park'인 문서를 모두 반환
db.people.find( {
$or :
[ { age : {$in : [25,22] }},
{ name : "park"}]
} )
$mod
- $mond 연산자는 나머지 연산을 할 수 있음.
- 즉, $mod 연산자를 활용할 때는 첫 번째 값으로 나눈 후 그 나머지 값의 조건을 두 번째 값으로 기술함
- { $mod : [5,0] }으로 주면, 5로 나누어 나머지가 0인 값들로 해석
- 'age' 키의 값을 5로 나누었을 때 나머지가 0인 문서를 반환
- 'age' 키의 값이 25인 문서들만 반환
db.people.find({ age : { $mod : [5, 0] } } )
$mod, $not 조합
- age 키의 값을 5로 나누었을 때 나머지가 0인 문서와 일치하지 않은 문서들을 반환
- $not 연산자는 정규 표현식과 함께 사용이 가능해 패턴과 일치하지 않는 문서를 찾을 때 특히 유용
db.people.find({ age : { $not : { $mod : [5,0]} } } )
null
- null은 스스로와 일치하지 않는 문서를 조회
- "y"의 키가 "null"인 문서를 조회할 수 있음
- null은 존재하지 않음이라는 의미로 해석되기 때문에 키가 null인 값을 조회하면 해당 키를 가지고 있지 않는 문서도 반환
- x의 키가 null 인 문서도 조회가 가능
데이터 추가
db.nullcol.insertMany([
{ "_id" : 1, "y" : null },
{ "_id" : 2, "y" : 1 },
{ "_id" : 3, "y" : 2 }
])
- MongoDB에서 null의 경우 두 가지 의미로 해석된다.
- 첫째로 값이 null인 경우로 아래 사진의 y:null을 찾을 때의 예시이다.
- 두 번째로 아래 사진의 x:null을 찾을 때로 해당하는 키 자체가 없는 경우에도 null로 인식한다.
- 값이 null인 키를 찾고 싶다면, 키가 null인 값을 쿼리하고 exists 조건절을 사용하여 가능
정규표현식
- $regex는 쿼리에서 패턴 일치 문자열을 위한 정규식 기능을 제공
- PCRE(Perl Compatible Regular Expression) 라이브러리를 활용하여 해당 문법을 따름
- / : 문자열의 구분자
- ^ : 문자열의 처음
- $ : 문자열의 끝
데이터 추가
db.regexcol.insertMany([
{ "_id" : 1, "sku" : "abc123", "description" : "Single line description." },
{ "_id" : 2, "sku" : "abc789", "description" : "First line\nSecond line" },
{ "_id" : 3, "sku" : "xyz456", "description" : "Many spaces before line" },
{ "_id" : 4, "sku" : "xyz789", "description" : "Multiple\nline description" }
])
- 마지막 쿼리문의 /^S/ , $options: 'm'의 경우 대문자 S로 시작하는 여러 줄의 문자열을 가진 필드의 문서를 반환한다.
- \n의 경우 줄 바꿈으로 인식한다.
'Back > MongoDB' 카테고리의 다른 글
MongoDB와 Python 연동하기 (0) | 2023.05.18 |
---|---|
Mongo DB 실습 - 3 (0) | 2023.05.18 |
Mongo DB 이론 - 2 (0) | 2023.05.17 |
Mongo DB 실습 - 1 (0) | 2023.05.17 |
MongoDB 이론 - 1 (0) | 2023.05.17 |