https://github.com/Karoid/mongodb_tutorials
- 다운받아 nosqlboster에 import 함
- area.json, # 전국 지역 정보와 인구수
- by_month.json, # 각 지역 교통사고 통계 월별 정리
- by_road_type.json, # 각 지역의 도로 형태별 사고 통계
- by_type.json # 각 지역 사고 형태별 통계
db.containerBox.find({name:'cat'})
{<filter> :{<operator> : <value>},....} {height : {$gte: 175, $lte :180} {height : {$gte: 175}, weight:{$lte :180}} {$or [{ status : 'A'}, {qty:{$lt:30}}]} {'name.first" : "Karoid", 'name.last': 'Jeong'}
db.inventory.insertMany([ { item: "journal", qty: 25, tags: ["blank", "red"] }, { item: "notebook", qty: 50, tags: ["red", "blank"] }, { item: "paper", qty: 100, tags: ["black"] }, { item: "planner", qty: 75, tags: ["blank", "red"] }, { item: "postcard", qty: 45, tags: ["blue"] } ]);
db.inventory.find({item:{$eq:'journal'}}) db.inventory.find({item:'journal'}) db.inventory.find({tags: {$in : ['red']}}) db.inventory.find({tags: {$nin:["blank","blue"]}}) db.inventory.find({tags: {$in : [/^[a-z]*d/]}}) db.inventory.find({tags: {$in : [/^b/]}}) db.inventory.find({qty:{$not:{$gt:50}}}) db.inventory.find({qty:{$lte:50}}) db.inventory.find({$or:[{qty:{$gt:90}},{qty:{$lt:50}}]}) db.inventory.find({$and:[{qty:{$gt:50}},{qty:{$lt:90}}]}) db.inventory.find({qty:{$gt:50,$lt:90}})
- $regex 정규식
- $text 문자열 검색
{<field> : { $regex : /pattern/, $options : '<options>'}} {<field> : { $regex : 'pattern', $options : '<options>'}} {<field> : { $regex : /pattern/<options>}}
db.article.find({"title": /article0[1-9]/i}) db.inventory.find({item:/^p/i}) #m 사용
- i : 대소문자 무시
- m: 대소문자 구분
- x: 정규표현식에 있는 공백 모두 무시
- s : 점(.)을 하용할 때 \n을 포함해서 매치
{ $text: { $search: <string>, $language: <string>, $caseSensitive: <boolean>, $diacriticSensitive: <boolean> } }
- $text Operation
db.stores.find( { $text: { $search: "java coffee shop" } } )
- Exact Phrase : 정확하게 일치하는 문서 찾기
db.stores.find( { $text: { $search: "\"coffee shop\"" } } )
- Term Exclustion : "-"연산자를 사용하여 검색에 제외할 텀을 지정
db.stores.find( { $text: { $search: "java shop -coffee" } } )
- sort
db.stores.find( ... { $text: { $search: "java coffee shop" } }, ... { score: { $meta: "textScore" } } ... ).sort( { score: { $meta: "textScore" } } )
- $all 순서와 상관없이 있으면 선택
- $elemMatch 조건과 맞는 배열 속 요소를 가진 것을 선택
- $size 해당 배열의 크기와 같은 것 선택
item: "book", tags: ["blank", "red"]} {item: "book", tags: ["red", "blank"]} {item: "book", tags: ["blue"]}
- tags에 red가 들어간 도큐먼트 전부 출력
db.inventory.find({tags: "red"})
- tags가 "red", "blank" 둘 다 주어진 순서대로 가진 도큐먼트 전부 출력
db.inventory.find({tags: ["red", "blank"]})
- 배열의 요소 별로 해당 조건을 적용
db.collection.find({tags: {$gt: 10, $lt: 5}}) db.collection.find({tags: {$elemMatch: {$gt: 10, $lt: 5}}}) db.by_month.find({$and: [ {month_data: {$elemMatch: {month: "01월", heavy_injury: 0}}}, {month_data: {$elemMatch: {month: "02월", death_toll: 0}}} ]})
- 순서가 중요함
b.inventory.find({tags: ["red", "blank"]})
- $all을 쓰면 "red", "blank" 순서와 상관 없이 해당 요소가 있는지만 확인
db.collection.find({tags: {$all: ["red", "blank"]}})
- 배열 lenth가 3인 문서
db.collection.find({tags: {$size: 3}})
- 특정 필드만 가져옴
- $slice : 배열 필드에 주어진 범위
- $elemMatch : 배열 필드의 조건에 맞는 것만
- $ : 첫번째 요소만
db.people.insetMany( {name: {first: "철수", last: "김"}} {name: {first: "영희", last: "김"}} {name: {first: "수영", last: "박"}} {name: {first: "희영", last: "이"}} ) db.collection.find({}, {"name.first": 1})
{item: "book", tags: ["red", "blank"]}
- 잘못됨. tags의 첫번째 인자[0]가 아니라 tags 배열의 0이란 원소를 출력하라는 의미
db.collection.find({}, {"tags.0": 1})
- tags 배열의 [0], [1]을 출력하라 (앞에서 부터 2개를 출력하라)
db.collection.find({}, {tags: {$slice: 2}})
- tags 배열의 [2:3] 을 출력하라
db.collection.find({}, {tags: {$slice: [2, 3]}})
-특정 조건에 부합하는 필드만 출력하라
db.collection.find({}, {$elemMatch: {$regex: /^b/}})
- 특정 조건에 부합하는 첫번째 데이터만 출력하라
db.collection.find({{tags: “red”}, {“tags.$:true}})
db.by_type.find({ type: "차대차", accident_count: { $gte: 100 }, death_toll: 0 })
db.by_type.find({ $or: [{ type: "차대사람" }, { heavy_injury: { $gte: 0 } }, { death_toll: 0 }] })
- 전국 도루 종류 중에 '기타단일로'로 중에 사망자가 0인 도큐먼트의 지역명과 '기타단일로의 사망자수, _id 출력
- 2차 지역명이 구로 끝나는 도큐먼트를 찾아라
- 동시에 2차 지영명 첫글자 초성이 'o'인 도큐먼트를 찾아라
- 탖은 도큐먼트에서 1,2차 지역명과 매월 사고 회수가 150회 이상인 달의 month 필드를 출력하라.
- 서울시에서 한달이 200회 이상 사고가 일어난 적이 있는 도큐먼트를 출력하라.
- 단 200회 이상 사고가 난 달의 정보가 도큐먼트에 한달치만 추력되어야 한다.
- 또한 'month_data"필드의 2차 지역명 관련 필드, _id만 표시된다.