CRUD Operations
- Create Operations
- 컬렉션에 새로운 도큐먼트를 추가하는 연산
- db.collection.insertOne()
- db.collection.insertMany()
- Read Operations
- 컬렉션에서 도큐먼트를 조회하는 연산
- db.collection.find()
- 도큐먼트를 식별할 수 있는 쿼리 필터나 기준을 지정할 수 있음
- Update Operations
- 컬렉션에 존재하는 도큐먼트를 수정하는 연산
- db.collection.updateOne()
- db.collection.updateMany()
- db.collection.replaceOne()
- Delete Operations
- 컬렉션에서 도큐먼트를 제거하기 위한 연산
- db.collection.deleteOne()
- db.collection.deleteMany()
Insert Documents
- 한개의 도큐먼트 삽입
db.inventory.insertOne( { item: "canvas", qty: 100, tags:["cotton"], size : {h:20, w:30, uom: "cm"}})
- 도큐먼트 삽입 후 조회하기
db.inventory.find({item: "canvas" }) 관계형 SQL식 표현 SELETE * FROM inventory WHERE item = 'canvas
- 다수의 도큐먼트 삽입
db.inventory.insertMany([
{ item : "note". qty : 25, tags : ["blank","red"], size : {h:14, w:21, uom : "cm"}},
{ item : "mat", qty : 85, tags : ["gray"], size : {h:28, w:36, uom:"cm"}},
{ item : "mousepad", qty : 25, tags : ["gel", "blue"], size : {h:19, w:23, uom:"cm"}}
])
- 도큐먼트 전체 조회하기
db.inventory.find({})
- Insert
- 컬렉션 생성 : 컬렉션이 존재하지 않는 경우, 컬렉션을 생성한 후 도큐먼트를 삽입
- _id field : 컬렉션에 저장되는 도큐먼트는 유일한 식별자 역할을 하는 _id필드가 필요함. 도큐먼트를 삽입할 때 _id field를 생략하면 자동적으로 Objectid를 생성하여 _id field 값으로 저장
Query Documents
- 모든 도큐먼트 조회
db.inventory.find({}) SQL SELECT * FROM inventory
- 동등비교 {<field1> : <value1>, <field2> : <value2> , ....}
db.inventory.find({status: "D"}) SQL SELECT * FROM inventory WHERE status = "D"
- 쿼리 연산자를 사용한 조건 지정 {<field1> : {<operator1> : <value1>}, ...}
- Query selector : 모든 도큐먼트에 대해 일치 여부를 검사하기 위한 조건으로 사용
db.inventory.find({status : { $in: ["A", "D"]}}) SQL SELECT * FROM inventory WHERE status in ("A", "D")
- AND 조건
db.inventory.find({status : "A", qty : {$lt: 30}}) SQL SELETE * FROM inventory WHERE status = "A" AND qty < 30
- OR 조건
db.inventory.find({$or : [{status : "A"}, {qty : {$lt: 30}}]}) SQL SELECT * FROM inventory WHERE status = "A" OR qty < 30
- AND, OR 조건
db.inventory.find({ status : "A", $or : [{qty: {$lt : 30 }}, {item: /^p/}]}) SQL SELECT * FRO< inventory WHERE status = "A" AND (qty < 30 OR item LIKE "p%")
/^p/정규식 p로 시작하는글자
Query Selector의 연산자
- $eq : 특정 값과 같은(=)값을 갖는 경우 참 equal
- $gt : 특정 값보다 큰(>)값을 갖는 경우 참 greater than
- $gte : 특정 값보다 크거나 같은(>=)값을 갖는 경우 참
- $lt : 특정 값보다 작은(<)값을 갖는 경우 참 less than
- $lte : 특정 값보다 작거나 같은(<=)값을 갖는 경우 참
- $ne : 특정 값과 다른(!=)값을 갖는 경우 참 not equal
- $nin : 배열에 지정된 값들과 일치하지 않는 경우 참 not in
- $in : 배열에 지정된 값들 중 일치하는 값을 갖는 경우 참
내장 도큐먼트 쿼리
- 내장도큐먼트 : 필드(키)에 대한 값이 도큐먼트로 구성된 경우 이르르 내장 도큐먼트라고 함
db.inventory.insertMany([ {item : "journal", qty : 25, size : {h :14, w: 21, uom: "cm"}, status:"A"}, {}, ....)
- 내장 도큐먼트의 필드에 대한 동등 조건 지정
db.inventory,find({size : {h:14, w: 21, uom:"cm"}})
- Nested field에 대해 동등 비교 조건 지정하기
db.inventory.find({"size.uom" : "in"})
- Query selector를 이용한 조건 지정하기 { <field1> : { <operator1> : <value1>}, {}, ...}
db.inventory.find({"size.h" : {$lt: 15}})
- AND조건(,) 지정하기
db.inventory.find({"size.h" : {$lt : 15}, "size.uom" : "in", status:"D"})
배열 요소 쿼리
- 값이 정확하게 일치하는 경우 찾기 → 값의 위치까지도 동일해야함
db.inventory.find({tag:["red", "blank"]})
- 값을 포함하고 있는 요소들 조회하기
db.inventory.find({tags : { $all : ["red", "blank"]}})
- 배열 필드에 지정된 값을 가진 요소가 하나 이상 있는지 조회
db.inventory.find({tags: "red"})
- Query operator를 사용하기
db.inventory.find({dim_cm : {$gt:25}})
- 여러 조건 지정하기
db.inventory.find({dim_cm : {$gt: 15, $lt:20}})
- 여러 조건을 만족하는 배열 요소 쿼리 ($elemMatch)
- 지정된 조건을 모두 충족하는 배열 요소 쿼리
db.inventory.find({ dim_cm : {$elemMatch: {$gt: 22, $lt: 30}}})
- 배열 인덱스로 쿼리(인덱스는 0부터 시작)
db.inventory.find({ "dim_cm.1" : {$gt: 25}})
- 배열의 길이(크기)로 쿼리 ($size)
db.inventory.find({"tags" : {$size:3}}) // tags필드의 배열의 크기가 3인 document출력
- 배열 내부의 도큐먼트 쿼리
db.inventory.find({"instock" : {warehouse: "A", qty: 5}})
- 도큐먼트 배열에 포함된 필드에 조건 지정하기
db.inventory,find({"instock.qty" : {$lte : 20}})
- 배열 인덱스로 내장 도큐먼트에서 쿼리하기
db.inventory.find({'instock.0.qty' : {$lte:20}})
- $elemMatch를 이용한 다중 조건 지정하기
db.inventory.find({"instock" : { $elemMatch : {qty : { $gt: 10, $lte: 20}}}})
프로젝션(projection)
- 특정 필드들 조회하기
db.inventory.find({status : "A"}, {item : 1, status : 1}) SQL SELECT item, status FROM inventory WHERE status = "A"
- 특정 필드들 제외시키기
db.inventory.find({status : "A"}, {status : 0, instock: 0})
- 내장 도큐먼트의 특정 필드 출력
db.inventory.find({status : "A"}, {item : 1, status : 1, "size.uom" : 1})
- 내장 도큐먼트의 특정필드 제외시키기
db.inventory.find({status : "A", {"size.uom" : 0})
- 배열 내의 내장 도큐먼트 프로젝션
db.inventory.find({status : "A"}, {item : 1, status : 1, "instock.qty" : 1})
Null 또는 존재하지 않는 필드 쿼리
db.inventory.insertMany([ { _id:1, item: null} , {_id : 2} ])
item 필드가 null이거나 없는 경우 쿼리
db.inventory.find({item:null})
필드를 포함(해당 필드가 존재하지 않음)하지 않는 도큐먼트 쿼리
db.inventory.find({item : {$exists : false}})
도큐먼트 갱신
- 필드 값을 $set과 같은 갱신 연산자를 이용하여 수정하기
db.inventory.updateOne( {item:"paper"}. { $set : {"size.uom" : "cm", status : "P"}, $currentDate : {lastModified : true}})
size.uom, status는 수정
lastModified는 새로 추가 → 스키마가 없으므로 필드 추가가 자유로움
- 여러 도큐먼트 갱신하기
db.inventory.updateMany({"qty" : {$lt : 50}}, {$set : {"size.uom": "in", status: "P"}, $currentDate : {lastModified: true}})
db.inventory.replaceOne({item: "paper"} , {item: "paper", instock : [{warehouse : "A", qty : 60}, {warehouse : "B", qty: 40}]})
도큐먼트 삭제
- 여러 도큐먼트 삭제하기
db.inventory.deleteMany({status: "A"})
- 한개의 도큐먼트 삭제하기
db.inventory.deleteOne({status : "D"})
'JX405기_비트 > mongoDB' 카테고리의 다른 글
Day17-0 MongoDB Day16 요약 & SQL과 비교 (0) | 2023.02.08 |
---|---|
Day16-3 MongoDB Cursor, MongoDB 연습 문제2 (0) | 2023.02.07 |
Day16-3 MongoDB 연습 문제1 (0) | 2023.02.07 |
Day16-1 MongoDB 정의, 기본 개념 (0) | 2023.02.07 |
Day16-0 MongoDB Conpass 설치하기 (0) | 2023.02.07 |