명령어
- 필드명
- 단일 인용부호, 더블, 안쓰든 상관 없다 (mongoDB만)
- 외부 파일로 내보내기
- mongoexport --db 데이터베이스명 -c 컬렉션명 --out 파일패스
- josn 문서를 도큐먼트로 데리고 오기
- mongoimport --db 데이터베이스명 -c 컬렉션명 --file 제이슨명.josn
- find
- 조건 (생략하면 안됨 - 객체의 형식은 갖춰야 한다.)
- 없으면 null을 주거나 비어두면 됨.
- 꺼내고자 하는 데이터
- 조건 (생략하면 안됨 - 객체의 형식은 갖춰야 한다.)
배열 데이터에 대한 쿼리
db.book.find({price : {$lt:10000}},{name : true, price : true, _id: false}}
- 연산자를 필드로 넣은 것
- sql에서 where절
- 10000보다 작은 값
- 추출하고자하는 필드의 대한 정보
- {name : true, price : true, _id: false}
- sql에서 select절
db.book.find({$and : [{price:{$get : 10000}},{price : {$lt : 20000}}]},{name : true, price : true, _id: false}}
- 값 여러개 쓰고 싶을 땐, array
- $and : 논리 곱 (두개의 비교식이 모두 만족하면)
- 두개의 식이니깐 리스트로 주고 있다.
void print(int p1, String p2)
- 자바 스크립트는 매개변수 하나만 전달해도 들어감
- 3개 넣으면 앞에서 부터 2개 전달함 (한개 버림)
- p2한테만 전달 불가, p1한테 null이라도 줘야함
db.book.find({price : {$gt:8000}}).count()
- db 커리 객체에 count호출
db.book.find({name : {"$regex":"^java"}})
db.book.find({name : /^java/})
- 정규표현식 객체로 인식한다 -> /붙이면
- $regex 생략
- 자바스크립트 특성
db.inventory.insertMany([
{item:"journal", qty : 25, tags:["blank","red"], dim_cm:[14,21]},
{item:"notebook", qty : 50, tags:["red","blank"], dim_cm:[14,21]},
{item:"journal", qty : 25, tags:["red", "blank", "plain"], dim_cm:[14,21]},
{item:"planner", qty : 75, tags:["blank","red"], dim_cm:[22.85, 30]},
{item:"postcard", qty : 45, tags:["blue"], dim_cm:[10,15.25]}
]);
- insertMany : 한번에 다 넣기
db.inventroy.find({tags:["red", "blank"]})
- tags값이 red, blank 배열값만 가지는 친구만
- 순서도 지키고, 두개의 값만 들어가있는 것만
db.inventroy.find({tags:{$all:["red","blank"]}})
- red, blank을 가지고 있는 얘들 모두
db.inventroy.find({tags: "red"})
- 레드가 들어가 있는 얘들은 다 꺼내라
db.inventroy.find({dim_cm: {$gt:25}})
- 조건을 만족하는 얘를 꺼내라
db.inventroy.find({dim_cm: {$elemMatch:{$gt:22, $lt:30}}})
- elemMatch : 주어진 비교식 중에서 하나라도 만족하는 얘를 꺼내겠다.
- 22보다 크고 30보다 작은 값이 하나라도 있으면
db.inventroy.find({dim_cm.1: {$gt:25}})
- dim_cm.1 : dim_cm이란 필드의 두번째 값
db.inventroy.find({"tags": {$size:3}})
- tags의 사이즈가 3인 값 (3개의 값을 가진 것)
db.inventroy.find({"dim_cm.0": {$eq:14}})
- dim_cm필드의 첫번째 값이 14와 같은 거 꺼내라
value값이 임베디드 객체에 대한 쿼리
- 포함되는 객체 = 임베딩 객체
- "."을 이용해서 멤버 접근
db.inventory1.insertMany([
{item:"journal", qty : 25, size : {h:14, w:21, uom:"cm"}, status:"A"},
{item:"notebook", qty : 50, size : {h:8.5, w:11, uom:"in"}, status:"A"},
{item:"paper", qty : 100, size : {h:8.5, w:11, uom:"in"}, status:"D"},
{item:"planner", qty : 75, size : {h:22.85, w:30, uom:"cm"}, status:"D"},
{item:"postcard", qty : 45, size : {h:10, w:15.25, uom:"cm"}, status:"A"},
]);
db.inventory1.find()
db.inventory1.find({size : {h:14, w:21, uom:"cm"}}, {_id:false})
- 이 조건을 정확하게 만족하는 애를 찾아라
- _id : false -> id 제외한 모두 출력
db.inventory1.find({size : {w:21, h:14, uom:"cm"}}, {_id:false})
- 객체 구성 그대로 줘야함
db.inventory1.find({"size.uom" : "in"}, {_id:false})
- uom만 가지고 비교하고 싶다.
db.inventory1.find({"size.h" : {$lt : 15}}, {_id:false})
db.inventory1.find({"size.h" : {$lt : 15}, "size.uom" : "in", status : "D"}, {_id:false})
- 여러가지 조건을 하나의 json 조건에 넣을 수 있다.
임베디드 객체를 원소로 갖는 배열에 대한 쿼리
- 원소들이 객체들인 배열 : 객체 배열
db.inventory2.insertMany([
{item:"journal", instock : [{warehouse:"A", qty : 5}, {warehouse:"C", qty:15}]},
{item:"notebook", instock : [{warehouse:"C", qty : 5}]},
{item:"paper", instock : [{warehouse:"A", qty : 60}, {warehouse:"B", qty:15}]},
{item:"planner", instock : [{warehouse:"A", qty : 40}, {warehouse:"B", qty:5}]},
{item:"postcard", instock : [{warehouse:"B", qty : 15}, {warehouse:"C", qty:35}]},
]);
db.inventory2.find({"instock":{warehouse:"A", qty:5}})
db.inventory2.find({"instock":{qty:5, warehouse:"A"}})
db.inventory2.find({"instock.qty":{$lte:20}})
db.inventory2.find({"instock.0.qty":{$lte:20}})
db.inventory2.find({"instock":{$elemMatch:{qty:5, warehouse:"A"}}})
- qty가 5이고, warehouse가 "A"인 것
db.inventory2.find({"instock":{$elemMatch:{qty:{$gt:10, $lte:20}}}})
- qty가 10보다 크고, 20보다 작거나 같은 것 모두
- 원소(객체)단위로 찾음
db.inventory2.find({"instock.qty":{$gt :10, $lte:20}})
- 10보다 크거 or 20보다 작거나 같은거 모두
db.inventory2.find({"instock.qty":5,"instock.warehouse":"A"})
- qty가 5이거나, A인것 모두
- 데이터 저장할 때 최소 단위는 도큐먼트
- 도큐먼트는 한 덩어리의 json객체이다.
- 필드 값
- 싱글값, 객체, 배열, 객체배열
- 값이 객체 : 임베딩 객체
cursor객체
- find한 결과를 변수에 담을 때
- js : var사용해서 객체 생성
- find가 리턴하는 것 : cursor객체
- cursor객체는 내용 한번만 읽을 수 있음
- 10분동안 사용하지 않으면 만료됨
var myCursor = db.book.find().limit(3)
while(myCursor.hasNext()){
doc = myCursor.next();
print("-------------------------------------------");
printjson(doc)
}
var myCursor = db.book.find().skip(2).limit(2)
myCursor.forEach(print)
var myCursor = db.book.find().skip(2).limit(2)
myCursor.forEach(printjson)
var myCursor = db.book.find({}, {name:true, price : true, _id:false})
printjson(myCursor[0])
var myArray = myCursor.toArray()
myArray
- myCursor는 한번만 쓸 수 있기때문에 toArray하면 myCursor 내용없어짐
- toArry( ) : 각각의 데이터 스캔함
정규표현식
db.book.copyTo("book2") //book컬렉션 book2로 복사
db.book.find({"name":/^java/}) // java로 시작하는
db.book.find({"name":/java/}) // java포함 = %java%
db.book.find({"name":/java$/}) // java로 끝나는것 = %java
db.book.find({"name":/j|a|v/}) // j or a or v를 포함하는
db.book.find({"name":/[jav]/}) // j or a or v를 포함하는
db.book.find({"name":/[a-k]/}) // a,b,c,d,e,f,g,h,i,j,k 중에 하나를 포함하는
db.inventory.find({item:{$not : /^p.*/}}); // p로 시작하고 임의의 문자가 뒤에 0개 이상오는게 아닌것
db.inventory.find({item : {$not:{$regex:"^p.*"}}})
db.inventory.find({item : {$not:{$regex:/^p.*/}}})
'study > JAVA 전문가' 카테고리의 다른 글
[Web programming] (0) | 2021.12.27 |
---|---|
[mongoDB] 날짜 데이터 (0) | 2021.12.24 |
[mongoDB] (0) | 2021.12.22 |
[mysql] 연습문제 2 (0) | 2021.12.22 |
[sql] roll back 연습문제 (0) | 2021.12.21 |