Search

생성, 제거, 업데이트

대분류
DB
소분류
Mongo
설명
Document, Collection, Database 생성, 제거, 업뎃 명령어
유형
명령어
주요 레퍼런스
https://www.mongodb.com/docs/mongodb-shell/reference/methods/#std-label-mongosh-database-methods
최종 편집 일시
2024/10/31 03:30
생성 일시
2024/01/17 01:15
13 more properties

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
복사