MongoDB CRUD

zihooy·2023년 6월 9일
0

MongoDB

목록 보기
3/3
post-thumbnail

MongoDB에서 CRUD를 실행하는 법에 대해 알아보자.

🏹 MongoDB CRUD 실행

이전 포스트에서 이어진다.

find()

쿼리를 실행하여 컬렉션에서 문서를 검색하는 메소드이다.

db.people.find({});

drop()

컬렉션을 삭제하는 메소드이다.

db.people.drop();

insert()

문서를 컬렉션에 삽입하는 메소드이다.

db.people.insert({name:'호랑이1', 'age':10, 'salary':1000});

db.people.drop();
db.people.insert({name:'호랑이1', 'age':10, 'salary':1000});
db.people.insert({name:'호랑이2', 'age':20, 'salary':2000});
db.people.insert({name:'호랑이3', 'age':30, 'salary':3000});
db.people.find({});

검색 조건 설정

find() 메소드는 일반적으로 db.collection.find(query, projection) 의 형태로 사용된다.
projection은 반환할 필드를 선택하는 옵션이다. 기본적으로는 모든 필드를 반환하며, 필요한 필드만 선택하여 조회 결과를 제한할 수 있다.

예시

{_id:false} 를 조건으로 걸면 아이디를 출력하지 않는다.

db.people.find({}, {_id:false});

Table View로 결과를 확인하면 다음과 같다.

db.people.find({'name':'호랑이2'});

db.people.find({},{'age':false});

age를 제외한 값들이 출력된다.

호랑이 1의 age 출력하기

db.people.find({'name':'호랑이1'}, {'age':true});

id를 제외하고 원하는 field 출력하기

db.people.find({'name':'호랑이1'}, {_id: false, 'age':true, 'salary': true});

위 코드를 아래와 같이 false를 0, true를 1로로 나타낼 수 있다.

db.people.find({'name':'호랑이1'}, {_id:0, 'age':2, 'salary':2});

그러나 age: 0과 같이 _id를 제외한 field에는 false 값을 설정할 수 없다.
따라서, 출력을 원하는 field만 입력하면 된다.

함수 사용 방법

우선 데이터를 초기화하자.

db.people.drop();
db.people.insert({name:'호랑이1', 'age':10, 'salary':1000});
db.people.insert({name:'호랑이2', 'age':20, 'salary':2000});
db.people.insert({name:'호랑이2', 'age':30, 'salary':3000});
db.people.insert({name:'호랑이4', 'age':10, 'salary':3000});

{$함수이름:인수} 형태로 함수를 호출 할 수 있다.
예시를 살펴보자.
{$set:{}} : set 함수 호출, 전달하는 인수의 type이 document
{$set:{age:40}} : set 함수 호출, 전달하는 인수의 type이 document, document의 데이터 age = 40으로 설정

{$함수:인수, $함수:인수, ...}의 형태도 사용할 수 있다.

변수 사용 방법

변수 = 함수();
변수 = $abs $cmp 와 같이 사용 가능하다.

Update Data

db.people.updateOne({'name':'호랑이2'}, {$set:{age:40}});

앞의 {'name':'호랑이2'} 는 검색 조건, {$set:{age:40}} 는 업데이트 조건
즉, name이 호랑이2인 데이터의 age를 40으로 update한다.
updateOne을 호출하였기 때문에 1개의 데이터만 수정된다.

만약 updateMany를 호출하였다면 {'name':'호랑이2'} 에 해당하는 모든 데이터의 age가 40으로 수정된다.

db.people.updateOne({'name':'호랑이2'}, {$set:{age:40}});

Delete Data

db.people.deleteOne({'name':'호랑이2'});


deleteMany() 를 실행하면 조건을 만족하는 데이터가 모두 삭제된다.

Update vs Replace

db.people.drop();
dp.people.insertOne({name:'호랑이1', age:10, sal:100});
db.people.find({}, {_id:false});

db.people.updateOne(
  {'name':'호랑이1'},
  {
    	$set:{'age':40}
  }
);

db.people.replaceOne({'name':'호랑이1'}, {age:999});

updateOne은 문서의 일부 필드를 업데이트하고 그 외의 필드는 그대로 유지하며, replaceOne은 기존 문서를 완전히 대체해버린다.

insertMany()

배열의 형태로 여러개의 데이터를 한번에 삽입할 수 있다.

db.people.insertMany([
    {name:'호랑이1', age:10, sal:100}, 
    {name:'호랑이2', age:10, sal:100}, 
    {name:'호랑이3', age:10, sal:100}
]);

변수를 사용한 insert

아래와 같이 data라는 변수에 데이터를 할당하고 변수를 통해 삽입할 수 있다.

let data = [
    {name:'호랑이1', age:10, sal:100}, 
    {name:'호랑이2', age:10, sal:100}, 
    {name:'호랑이3', age:10, sal:100}
]

db.people.insertMany(data);
db.people.find({}, {_id:false});

findOne()

find()와 다르게 findOne()d은 컬레션에서 첫 번째로 일치하는 문서만 검색한다.

let find = db.people.findOne({name:'호랑이2'});
find

let data = [
    {name:'호랑이1', age:10, sal:100}, 
    {name:'호랑이2', age:10, sal:100}, 
    {name:'호랑이3', age:10, sal:100}
]

db.people.insertMany(data);
db.people.find({}, {_id:false});

let find = db.people.findOne({name:'호랑이2'});

find.info = {age:find.age, sal:find.sal}
find.test = {sample:999}
find

delete

delete find.age;
delete find.sal;
find

🏹 MongoDB의 연산자

쿼리 연산자

$gt, $lt, $eq 등과 같은 쿼리 조건을 나타내는 연산자

업데이트 연산자

$set, $inc, $unset 등과 같은 업데이트 동작을 지정하는 연산자

프로젝션 연산자

$project, $group, $sort 등과 같은 어그리게이션 파이프라인에서 필드 선택, 그룹화, 정렬 등을 지정하는 연산자

어레이 연산자

$push, $pull, $addToSet 등과 같은 배열 필드에 대한 연산을 수행하는 연산자

🏹 MongoDB의 Update 연산자

upsert

upsert는 "update"와 "insert"의 합성어이다.
일반적으로 updateOne() 또는 updateMany() 메서드와 함께 사용되며, 업데이트 조건에 맞는 문서가 있는 경우 해당 문서를 업데이트하고, 조건에 맞는 문서가 없는 경우에는 새로운 문서를 삽입한다.

db.people.updateOne(
    {name:'호랑이1'}, 
    {$set:{age:20}},
    {upsert:false}
);
db.people.find({}, {_id:false});

data가 없는 경우, 새로운 문서가 삽입된다.

db.people.updateOne(
    {name:'호랑이4'}, 
    {$set:{age:20}},
    {upsert:true}
);
db.people.find({}, {_id:false});

$inc

$inc는 MongoDB의 업데이트 연산자 중 하나로, 숫자 필드를 증가 또는 감소시키는 데 사용된다.

db.people.drop();
let data = [
    {name:'호랑이1', age:10, sal:100}, 
    {name:'호랑이2', age:10, sal:100}, 
    {name:'호랑이3', age:10, sal:100}
]
db.people.insertMany(data);
db.people.updateOne(
    {name:'호랑이1'}, 
    {$inc:{age:1, sal:10}},
);
db.people.find({}, {_id:false});

$unset

$unset은 MongoDB의 업데이트 연산자 중 하나로, 필드를 제거하는 데 사용된다.

db.people.updateOne(
    {name:'호랑이1'}, 
    {$unset:{age:''}},
);
db.people.find({}, {_id:false});

setOnInsert

setOnInsert는 MongoDB의 upsert 작업에서 사용되는 업데이트 연산자이다.

db.people.updateOne(
    {name:'호랑이1'}, 
    {setOnInsert:{age:20}},
    {upsert:true}
);
db.people.find({}, {_id:false});

$rename

MongoDB에서 사용되는 업데이트 연산자 중 하나로, 문서 내의 필드 이름을 변경하는 데 사용된다.

db.people.updateOne(
    {name:'호랑이1'}, 
    {$rename:{age:'ageage'}},
);
db.people.find({}, {_id:false});

$min, $max

db.people.updateOne(
    {name:'호랑이1'}, 
    {$min:{age:5}},
);
db.people.find({}, {_id:false});

$push

MongoDB의 업데이트 연산자 중 하나로, 배열 필드에 값을 추가하는 데 사용된다.

db.people.updateOne({name:'호랑이1'}, {$push:{item:1000}});
db.people.find();

$each

$each는 MongoDB의 업데이트 연산자인 $push와 함께 사용되는 옵션이다.
push 연산자를 사용하여 배열 필드에 여러 값을 추가할 때, $each를 함께 사용하면 한 번에 여러 값을 추가할 수 있다.

db.people.updateOne({name:'호랑이1'}, {$push:{item:{$each:[3000, 4000]}}});

$position

db.people.updateOne(
    {name:'호랑이1'}, 
    {$push:
        {item:
            {$each:[3000, 4000], 
                $position:1
            }
        }
    }
);

$pop

db.people.updateOne(
    {name:'호랑이1'}, 
    {$pop:
        {item:+1}
    }
);

$pull

db.people.updateOne({name:'호랑이1'}, {$pull:{item:2000}});

$addToSet

db.people.updateOne({name:'호랑이1'}, {$addToSet:{item:2000}});

$slice

db.people.drop();
let data = [
    {'name': '호랑이1', 'age':10, 'sal':100, item:[10, 20, 30, 40]}
]

db.people.insert(data);

db.people.updateOne(
    {name:'호랑이1'}, 
    {$push:
        {item:
            {$each:[40, 50, 60, 70], 
                $slice: +5
            }
        }
    }
);
db.people.find();

$sort

db.people.updateOne(
    {name:'호랑이1'}, 
    {$push:
        {item:
            {$each:[], 
             $sort: -1
            }
        }
    }
);
db.people.find();

item 안의 항목을 기준으로 정렬

db.people.drop();
let data = [
    {'name': '호랑이1', 'age':10, 'sal':100, 
        item:[
            {id:1, score:20},
            {id:2, score:10},
            {id:3, score:40}
        ]}
]

db.people.insert(data);
db.people.updateOne(
    {name:'호랑이1'}, 
    {$push:
        {item:
            {$each:[], 
             $sort: {score:1}
            }
        }
    }
);
db.people.find();

🏹 MongoDB의 Query 연산자

$gt, $lt

db.people.find(
    {
        age:{
            $gt:7
        }
    }
);

age가 7보다 큰 값을 찾는다.

db.people.find(
    {
        age:{
            $gt:7, $lt: 10
        }
    }
);


age가 7보다 크고 10보다 작은 값을 찾는다.

$exsits

MongoDB 쿼리 연산자 중 하나로, 필드의 존재 여부를 검사하는 데 사용된다.

db.people.find({ageage:{$exists:true}})

ageage field가 있는 문서 반환

$mod

MongoDB 쿼리 연산자 중 하나로, 필드의 값을 주어진 나머지(modulus) 연산으로 비교하는 데 사용된다.

db.people.find({ age: { $mod: [5, 0] } })

age 필드의 값이 5로 나눈 나머지가 0인 문서를 반환

여러가지 조건 설정

name: 호랑이 3 && age<10을 만족하는 값 찾기

db.people.insertOne({name:'호랑이3', age:7, sal:100});
db.people.find(
    {
        name:'호랑이3',
        age:{
            $lt: 10
        }
    }
);


그러나, 아래와 같이 동일한 field를 두번 사용하게 되면 앞선 조건만 실행된다.

db.people.find(
    {
        name:'호랑이3',
        age:{
            $lt: 10
        },
      	age:{
            $lt: 20
        }
    }
);

문자열 검색

/ / 은 문자열의 부분을 나타내는 패턴으로, 어떠한 문자열을 검색할 때 사용한다.

db.people.find(
  {name:/^호/}
);
db.people.find(
  {name:/3$/}
);
db.people.find(
  {name:/호랑/}
);

🏹 MongoDB의 논리 연산자

$and

name: 호랑이 3 && age<10을 만족하는 값 찾기

db.people.find(
    {$and:[{name:'호랑이3'}, {age:{$lt:10}}]}
);

$or

name: 호랑이 3 || age<10을 만족하는 값 찾기

db.people.find(
    {$or:[{name:'호랑이3'}, {age:{$lt:10}}]}
);

profile
thisIsZihooLog

0개의 댓글