Database
생성 : use
use DATABASE_NAME
•
Database 생성 명령어
•
생성 후, 생성된 데이터베이스 사용
•
데이터베이스가 이미 존재하는 경우엔 현존하는 데이터베이스 사용
> use mongodb_tutorial
switched to db mongodb_tutorial
Shell
복사
제거 : dropDatabase()
db.dropDatabase()
•
Database 제거
•
명령어 사용 전, use 명령어로 삭제하고자 하는 데이터베이스 선택
> use mongodb_tutorial
switched to db mongodb_tutorial
> db.dropDatabase();
{ "dropped" : "mongodb_tutorial", "ok" : 1 }
Shell
복사
db
•
현재 사용중인 데이터베이스 확인
> db
mongodb_tutorial
Shell
복사
stats()
•
현재 사용하고 있는 데이터베이스 정보 출력
show dbs
•
생성된 데이터베이스 리스트 목록 확인
리스트에서 데이터베이스를 확인하려면 최소 한개의 Document를 추가해야 함
> show dbs
local 0.000GB
Shell
복사
Collection
생성 : createCollection()
db.createCollection(name, [option])
•
Collection 생성
•
option : document 타입으로 구성된 해당 컬렉션의 설정
Field | Type | 설명 |
capped | Boolean | true 설정 시, capped collection 활성화
Capped collection 이란, 고정된 크기(fixed size) 를 가진 컬렉션size 가 초과되면 가장 오래된 데이터를 덮어씀, size값 설정 필수 |
autoIndex | Boolean | true 설정 시, _id 필드에 index 자동 생성
기본값 : false |
size | number | 해당 컬렉션의 최대 사이즈(maximum size) 지정 (단위 : byte) |
max | number | 해당 컬렉션에 추가 할 수 있는 최대 document 갯수 |
> db.createCollection("articles", {
... capped: true,
... autoIndex: true,
... size: 6142800,
... max: 10000
... })
{ "ok" : 1 }
Shell
복사
show collections
•
생성된 collection 리스트 확인
•
collection 조회
제거 : drop()
db.COLLECTION_NAME.drop()
•
Collection 제거
•
명령어 사용 전, use 명령어로 삭제하고자 하는 데이터베이스 선택
> use test
switched to db test
> show collections
articles
books
people
> db.people.drop()
true
> show collections
articles
books
Shell
복사
Document
삽입 : insert()
db.COLLECTION_NAME.insert(DOCUMENT_NAME)
•
JSON 형식 document 입력 - 컬렉션이 존재하지 않을 경우 자동 생성 후 insert
◦
1개
db.books.insert({"name": "NodeJS Guide", "author": "Velopert"})
WriteResult({ "nInserted" : 1 })
Shell
복사
◦
2개이상
> db.books.insert([
... {"name": "Book1", "author": "Velopert"},
... {"name": "Book2", "author": "Velopert"}
... ]);
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
Shell
복사
제거 : remove()
db.COLLECTION_NAME.remove({CRITERIA}, [justOne])
•
Document 제거
•
Parameter
parameter | type | 설명 |
*criteria | document | 삭제 할 데이터의 기준 값 (criteria) 입니다. 이 값이 { } 이면 컬렉션의 모든 데이터를 제거합니다. |
justOne | boolean | 선택적(Optional) 매개변수이며 이 값이 true 면 1개 의 다큐먼트만 제거합니다. 이 매개변수가 생략되면 기본값은 false 로 서, criteria에 해당되는 모든 다큐먼트를 제거합니다. |
> db.books.find({"name": "Book1"})
{ "_id" : ObjectId("56c097f94d6b67aafdeb88ac"), "name" : "Book1", "author" : "Velopert" }
> db.books.remove({"name": "Book1"})
WriteResult({ "nRemoved" : 1 })
> db.books.find()
{ "_id" : ObjectId("56c08f3a4d6b67aafdeb88a3"), "name" : "MongoDB Guide", "author" : "Velopert" }
{ "_id" : ObjectId("56c08f474d6b67aafdeb88a4"), "name" : "NodeJS Guide", "author" : "Velopert" }
{ "_id" : ObjectId("56c097f94d6b67aafdeb88ad"), "name" : "Book2", "author" : "Velopert" }
Shell
복사
DeleteOne(), DeleteMany()
db.COLLECTION_NAME.DeleteOne(field)
db.COLLECTION_NAME.DeleteMany(field)
•
deleteOne은 매칭되는 첫 번째 Document만 제거
•
deleteMany는 매칭되는 모든 Document만 제거
수정 : update()
db.COLLECTION_NAME.update(field, $set: {field})
•
데이터 수정
•
기본적으로 하나의 쿼리만 수정
•
({field}, {$set: {change field}}) : 기존 doc를 change doc로 변경, $set을 해야 해당 필드만 변경.
만약 $set을 넣지 않을 경우 다큐먼트 내용이 다 지워지고 해당 객체로 통째로 대체
db.book.update({
name:"F"
}, {
$set: {
name:"F",
hits:20
}
}, {
upsert:true # upsert : 값이 없을 경우 insert 시행.
# update + insert의 합성어
})
# 만약 수정할 대상이 없다면 보통의 경우는 아무것도 변하지 않고 종료
# upsert옵션을 통해 삽입 가능
db.book.update({
hits:{$lte:30} // hits <= 30
}, {
$set:{
bestseller:"N"
}
},{
multi:true
})
# update는 기본적으로 하나의 행만 업데이트
# 따라서 여러 행을 업데이트 할 경우 {multi:true}로 설정
Shell
복사
updateOne / updateMany / replaceOne
db.COLLECTION_NAME.updateOne(field, {change field})
db.COLLECTION_NAME.updateMany(field, {change field})
db.COLLECTION_NAME.replaceOne(change field)
•
updateOne은 매칭되는 다큐먼트 중 첫 번째만 수정
•
updateMany는 매칭되는 모든 다큐먼트를 수정.
기존 {multi:true} 옵션이 두 메소드로 나누어 진 것.
•
replaceOne 메소드는 다큐먼트를 통째로 다른 것으로 대체. === $set을 안 썼을 때
findAndModify
db.COLLECTION_NAME.findAndModify(query, update, new)
•
upsert(update + insert) + remove
옵션 | TYPE | 설명 |
query | document | 대상을 찾는 법 |
update | document | 대상을 수정할 내용 |
new | boolean | 수정 이전의 다큐먼트를 반환할지, 수정 이후의 다큐먼트를 반환할 지 결정하는 부분. { new: true }를 넣으면 수정 이후의 다큐먼트를 반환 |
•
수정한 후에 수정된 결과를 다시 가져오고 싶다면 update 대신 findAndModify 메소드를 쓰는 게 좋음
db.monsters.findAndModify({
query: { name: 'Demon' },
update: { $set: { att: 150 } },
new: true
});
/*
1. query - name: 'Demon'인 것을
2. update - att: 150 로 내용을 수정
3. new : true - 수정 이후의 다큐먼트를 반환
*/
Shell
복사
findOneAndUpdate / findOneAndReplace
db.COLLECTION_NAME.findOneAndUpdate(name, $set, returnNewDocument)
db.COLLECTION_NAME.findOneAndReplace(name, $set, returnNewDocument)
•
findAndModify는 update, upsert, remove를 모두 담당하는데, 이 기능을 쪼개서 하나의 역할만 전담하는 메소드 라 할 수있다.
•
역시나 findAndModify 처럼 수정 이전 또는 이후의 다큐먼트를 반환 받는데, 대신 new 옵션이 아니라 returnNewDocument로 이름이 바뀌었다.
db.monsters.findOneAndUpdate(
{ name: 'Demon' },
{ $set: { att: 150 } },
{ returnNewDocument: true }
);
Shell
복사