1. use 데이터베이스이름 : 데이터 베이스를 사용(없는 이름이면 생성)
2. 컬럼이름 생성(1번 실행해서 데이터베이스 접속 상태에서)
db.createCollection('컬럼이름')
db.createCollection('col1')

3.컬럼 삭제
db.컬럼.drop()
db.col1.drop()
4. 데이터베이스 삭제
db.dropDatabase()

5. 데이터베이스 저장 insertOne / insertMany
db.col4.insertOne({name:'테스트', age:20, arrstr:[{hobby:'야구', hobby2:'테니스'}, {job:'프로그래머'}]})



db.col3.insertMany([
{name: '홍길동', age: 10, etc: [{hobby: '등산', state: '대한민국'}, {likenum: [1, 2, 3, 4, 5]}]},
{name: '임꺽정', age: 20, etc: [{hobby: '바둑', state: '중국'}, {likenum: [2, 3, 4, 5, 6]}]},
{name: '장길산', age: 30, etc: [{hobby: '낚시', state: '일본'}, {likenum: [3, 4, 5, 6, 7]}]},
{name: '일지매', age: 40, etc: [{hobby: '없음', state: '몽고'}, {likenum: [4, 5, 6, 7, 8]}]}
])



6. 조건문
db.col1.find( // select name, age from col1 where age = 30
{'age': // 조건을 지정할 필드 이름
// $eq: 같다, $ne: 같지 않다, $gt: 크다, $gte: 크거나 같다, $lt: 작다, $lte: 작거나 같다
// $in: 포함되어 있다, $nin: 포함되어 있지 않다.
{$eq: 30} // 조건을 지정할 필드에 관계 연산자를 적용한다.
},
{_id: 0, name: 1, age: 1}
)

7. 배열검색
db.col1.find(
{'etc': // 도큐먼트가 저장된 배열이 저장된 필드
// $elemMatch는 필드에 할당된 데이터가 도큐먼트가 저장된 배열일 경우 배열 내부 도큐먼트의 필드에 접근한다.
{$elemMatch:
{'hobby':
{$eq: '등산'}
}
}
},
{_id: 0, etc: 1}
)



8. 정규식 활용
db.col1.find( // select name from col1 where name like '%길%'
{'name':
// $regex: 정규식을 사용하는 문자열 검색, 부분일치 검색
// {$regex: '^홍'} // '홍'으로 시작하는
// {$regex: '매$'} // '매'로 끝나는
{$regex: '길'} // '길'을 포함하는
},
{_id: 0, name: 1}
)


9. 논리 연산자
db.col1.find(
// 논리 연산자
// $and => 조건들이 모두 참인 도큐먼트를 찾는다.
// $or => 조건들 중 하나 이상 참인 도큐먼트를 찾는다.
// $not => 논리 부정
// $nor => 조건들 중 하나 이상 거짓인 도큐먼트를 찾는다.
// 단일 필드의 and 연산은 {$gte: 20, $lte: 30} 방식을 사용하는 것이 편리하다.
{
$and: [ // 논리 연산자는 [] 내부에 논리 연산을 실행할 관계 연식을 입력한다.
{'age':
{$gte: 20}
}, // 관계 연산식
{'age':
{$lte: 30}
} // 관계 연산식
]
},
{_id: 0, name: 1, age: 1}
)


10. 관계 연산자
db.col1.find(
// 논리 연산 query의 top level에는 $and, $or, $nor만 사용할 수 있고 $not은 사용할 수 없다.
// 전체 논리 연산의 실행 결과를 부정하려면 $nor를 사용한다.
{$nor: // 논리 연산 query의 top level
[
{'age':
{$not: // 한 개의 관계 연산을 부정하려면 $not을 사용한다.
{$gt: 20}
}
}
]
},
{_id: 0, name: 1, age: 1}
)


11. 인덱스
db.col1.createIndex(
{'name': 'text'} // 반드시 'text'를 써야한다.
) // 인덱스를 만든다.
name_text
db.col1.find(
// {'name': '홍길동'},
{$text: // name 필드를 지정하지 않아도 인덱스로 검색이 가능하다.
{$search:
'홍길동'
}
},
{_id: 0, name: 1, age: 1}
)

12. 대소문자 구분
db.col2.find(
{$text:
{
$search: 'mike',
// $caseSensitive: false // 기본값은 false이고 대, 소문자를 구분하지 않는다.
$caseSensitive: true // 대, 소문자를 구분한다.
}
}
)

13.