명령어

  • 필드명
    • 단일 인용부호, 더블, 안쓰든 상관 없다 (mongoDB만)
  • 외부 파일로 내보내기
    • mongoexport --db 데이터베이스명 -c 컬렉션명 --out 파일패스
  • josn 문서를 도큐먼트로 데리고 오기
    • mongoimport --db 데이터베이스명 -c 컬렉션명 --file 제이슨명.josn
  • find
    1. 조건 (생략하면 안됨 - 객체의 형식은 갖춰야 한다.)
      • 없으면 null을 주거나 비어두면 됨. 
    2. 꺼내고자 하는 데이터

배열 데이터에 대한 쿼리

db.book.find({price : {$lt:10000}},{name : true, price : true, _id: false}}
  1. 연산자를 필드로 넣은 것
    • sql에서 where절 
    • 10000보다 작은 값
  2. 추출하고자하는 필드의 대한 정보
    • {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

+ Recent posts