Database/Mongo

MongoDB - 기본 CRUD 예제 1

Jeffrey Oh 2023. 3. 6. 14:36
반응형

기본 CRUD 예제

시나리오는 직원의 데이터를 관리


insertOne

1개 document 를 삽입
현재 재직중인 직원

db.employees.insertOne({
    name: "jeffrey",
    age: 20,
    dept: "backend",
    joinDate: new ISODate("2021-05-24"),
    salary: 100000,
    bonus: null
})

insertMany

2개 이상의 document 를 삽입
퇴사자 및 입사 예정 직원

db.employees.insertMany([
    {
        name: "mongo",
        age: 25,
        dept: "database",
        joinDate: new ISODate("2012-09-11"),
        salary: 500000,
        resignationDate: new ISODate("2014-06-10"),
        bonus: null
    },
    {
        name: "ognom",
        age: 30,
        dept: "devops",
        isNegotiating: true,
    }
])

2개 이상의 document 삽입은 insertMany 가 속도가 빠르다

for (i = 0; i<300; i++) {
    db.employees.insertOne({a: i})
}
var docs = [];
for (i = 0; i<300; i++) {
    docs.push({a: i});
}
db.employees.insertMany(docs);

updateOne

1개 document 를 수정
ognom 직원 신규입사 처리

db.employees.updateOne(
    {name: "ognom"}, // 첫 번째 인자는 `Query Filter` 가 들어감
    {
        $set: { // $set - 필드를 생성 또는 수정
            salary: 350000,
            dept: "backend",
            joinDate: new ISODate("2023-03-06")
        },
        $unset: { // $unset - 필드를 제거
            isNegotiating: "" // "" 으로 지정하면 제거됨
        }
    }
)

updateMany

여러개의 document 를 수정
재직자 기준으로 연봉 10% 인상

db.employees.updateMany(
    { resignationDate: { $exists: false }, joinDate: { $exists: true } }, // $exists - 필드의 존재 여부 return boolean
    {
        // $mul - multiply 약자로 여러개 지정시 사용
        $mul: { salary: Decimal128("1.1") }
    }
)

재직자 중 bonus 필드가 있는 사람에게 보너스 지급

db.employees.updateMany(
    { resignationDate: { $exists: false }, bonus: { $exists: true } },
    { $set : { bonus: 200000 } }
)

주의할 점은 null에 대한 값을 지정하는 경우에 필드가 없는 document 도 true 값을 반환하기 때문에 꼭 $exists 로 체크해야 한다


deleteOne

1개의 document 를 삭제

db.employees.deleteOne({
    name: "ognom"
})

여러개의 document 를 삭제

db.employees.deleteMany({}) // Query Filter `{}` 가 없으면 에러 발생하기 떄문에 꼭 같이 기입

만약 전체의 document 를 삭제하고 collection 까지 삭제하는 경우엔 다음 까지 추가 실행

show collections // 확인
db.employees.drop() // collection 삭제
show collections // 확인
반응형