데이터베이스/MongoDB

생성, 제거, 업데이트

MellowHoney 2024. 4. 1. 02:31
728x90
반응형

Database

생성 : use

🔖 use DATABASE_NAME
  • Database 생성 명령어
  • 생성 후, 생성된 데이터베이스 사용
  • 데이터베이스가 이미 존재하는 경우엔 현존하는 데이터베이스 사용
> use mongodb_tutorial
switched to db mongodb_tutorial

제거 : dropDatabase()

🔖 db.dropDatabase()
  • Database 제거
  • 명령어 사용 전, use 명령어로 삭제하고자 하는 데이터베이스 선택
> use mongodb_tutorial
switched to db mongodb_tutorial
> db.dropDatabase();
{ "dropped" : "mongodb_tutorial", "ok" : 1 }

db

  • 현재 사용중인 데이터베이스 확인
> db
mongodb_tutorial

stats()

  • 현재 사용하고 있는 데이터베이스 정보 출력

show dbs

  • 생성된 데이터베이스 리스트 목록 확인
💡 리스트에서 데이터베이스를 확인하려면 최소 한개의 Document를 추가해야 함
> show dbs
local  0.000GB

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 }

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

Document

삽입 : insert()

<aside> 🔖 db.COLLECTION_NAME.insert(DOCUMENT_NAME)

  • JSON 형식 document 입력 - 컬렉션이 존재하지 않을 경우 자동 생성 후 insert
    • 1개
     db.books.insert({"name": "NodeJS Guide", "author": "Velopert"})
    WriteResult({ "nInserted" : 1 })
    
    • 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" : [ ]
    })
    

제거 : 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" }

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}로 설정

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 - 수정 이후의 다큐먼트를 반환
*/

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 }
);
반응형