Lsiron
MongoDB 다뤄보기(insert, find, update, delete, query) 본문
MongoDB는 다양한 내장 함수를 제공하여 데이터베이스 작업을 더욱 편리하게 만들어준다.
MongoDB의 내장 함수들에 대해 알아보자.
1. insertOne
insertOne 함수는 단일 문서를 컬렉션에 삽입한다. 이 함수는 문서가 성공적으로 삽입되면 삽입된 문서의 ID를 반환한다.
const doc = { name: 'Lsiron', age: 28, address: '1 Main St' };
const result = await collection.insertOne(doc);
console.log(`내가 넣은 document의 id: ${result.insertedId}`);
출력
내가 넣은 document의 id: 60d9f9f1c2a6b3341c8e4b8e
2. insertMany
insertMany 함수는 여러 문서를 한 번에 컬렉션에 삽입할 때 사용한다.
const docs = [
{ name: 'Bob', age: 25, city: 'San Francisco' },
{ name: 'Carol', age: 28, city: 'Los Angeles' }
];
const result = await collection.insertMany(docs);
console.log(`${result.insertedCount} documents were inserted.`);
출력
2 documents were inserted.
3. find
find 함수는 컬렉션에서 문서를 검색하는 데 사용된다. 기본적으로 커서를 반환하며,
.toArray()를 사용하여 배열로 변환할 수 있다.
const query = { age: { $gt: 25 } };
const cursor = collection.find(query);
const results = await cursor.toArray();
console.log(results);
출력 ( 나이가 25이상인 필드와 밸류값을 출력한다는 찾는다는 뜻, $gt => ~ 이상 인 값. )
[
{ _id: 60d9f9f1c2a6b3341c8e4b8e, name: 'Alice', age: 30, city: 'New York'},
{ _id: 60d9fa2ec2a6b3341c8e4b8f, name: 'Carol', age: 28, city: 'Los Angeles'}
]
즉, cursor는 query의 결과를 가르키는 값이고, results는 이 cursor를 배열로 출력한다는 뜻이다.
더 깊게 해석 해 보자면, 기준점 query를 만들었고 이 query라는 기준을 이용하여 find를 치면 batch 라는 곳에 결과값들이 임시로 저장된다. 마지막으로 batch에 임시로 저장된 값을 배열로 출력한 것이다.
query라는 개념에 대해 알아보자.
query란 원하는 정보를 걸러내기 위한 깔대기 이다.
검색하고자 하는 내용을 query로 표현할 수 있어야 한다. 보통 원하는 조건을 이 query에 담게된다.
(이 query는 SQL에서 WHERE 절에 해당된다.)
query는 그 필드에 맞는 밸류 값으로 필터링 한다.
즉, { name : "Lsiron" } 으로 query를 만들면 name 필드의 "Lsiron" 값이 있는 조건을 걸어준다는 것이다.
다시말해서, { age : 28 } 로 query를 만들면 age 가 28 인 데이터를 가져오고 싶다는 조건을 걸어준다는 뜻.
또한 projection이라는 개념이 있는데, 만약 내가 { name : "Lsiron" } 으로 query를 만들고 출력을 한다면 name을 제외한 age, city 등 위 처럼 다른 정보들도 모두 출력이 될 것이다.
허나 나는 다른 정보를 제외하고 다른 이름만 출력하고 싶다면 아래처럼 query에 Boolean 값으로 projection 조건 ( {name: True} )을 추가 해 주면 된다.
const query = { { name: :Lsiron }, { name: True } };
const cursor = collection.find(query);
const results = await cursor.toArray();
console.log(results);
출력
{ _id: 60d9f9f1c2a6b3341c8e4b8e, name: "Lsiron" }
그러면 이름에 대한 결과만 나오게 된다. 반대로 Projection에 True 값이 아닌 false 값을 넣게 된다면, name 값이 나오지 않게 된다.
const query = { { name: :Lsiron }, { name: False } };
const cursor = collection.find(query);
const results = await cursor.toArray();
console.log(results);
출력
{ _id: 60d9f9f1c2a6b3341c8e4b8e, age: 28, city: "New York" }
허나, 아래와 같이 projection 안에 False와 True값이 혼용되어있으면, 결과값에 에러가 발생한다.
const query = { { name: :Lsiron }, { name: False, _id : True } };
const cursor = collection.find(query);
const results = await cursor.toArray();
console.log(results);
출력
Error
어느것을 보여주고 어느것을 보여주지 말란 것인지 모르기 때문에 에러가 발생한다.
4. findOne
findOne 함수는 조건에 맞는 단일 문서를 검색한다.
const query = { name: 'Alice' };
const result = await collection.findOne(query);
console.log(result);
출력
{ _id: 60d9f9f1c2a6b3341c8e4b8e, name: 'Alice', age: 30, city: 'New York' }
5. updateOne
updateOne 함수는 조건에 맞는 단일 문서를 업데이트한다.
인자로는 3개가 필요하다. 첫 번째: query, 두 번째: 업데이트 시킬 사항, 세 번째: upsert (Boolean 값)
const query = { name: 'Lsiron' };
const updateDoc = {
$set: { city: 'Boston' },
};
const result = await collection.updateOne(query, updateDoc, True);
console.log(`${result.matchedCount} document was matched.`);
console.log(`${result.modifiedCount} document was updated.`);
출력
1 document was matched.
1 document was updated.
$set 과 반대로 $unset 을 사용하면 해당 필드를 제거 할 수 있다.
ex) $unset: { city : True } 로 쓰게 되면 city 필드가 사라진다.
이 외에도 수 많은 update 연산자들이 있다. 다음에 다시 알아보도록 하자. 대신 update 연산자들의 공통점은 반드시 앞에 $ 표시가 붙어있다.
또한 세번째 인자의 True가 바로 upsert 값인데, Boolean 값으로 True, False를 넣는게 원칙이다.
이 upsert 값을 True 로 설정하면, 만약 matched 되는 document가 없을 시, 즉, Lsiron이라는 밸류 값을 가진 name 필드가 없을 때 새로운 document를 생성하여, 업데이트 하고자 하는 값을 넣어준다.
예를들어 아래와 같이 document에 넣어진다.
{ { name: 'Lsiron' }, { city: 'Boston' } }
당연하게도 False를 넣는다면 새로운 document를 생성하지 않는다.
6. updateMany
updateMany 함수는 조건에 맞는 여러 문서를 업데이트한다.
인자로는 3개가 필요하다. 첫 번째: query, 두 번째: 업데이트 시킬 사항, 세 번째: upsert (Boolean 값)
const query = { age: { $gt: 25 } };
const updateDoc = {
$set: { status: 'active' },
};
const result = await collection.updateMany(query, updateDoc, True);
console.log(`${result.matchedCount} document were matched.`);
console.log(`${result.modifiedCount} documents were updated.`);
출력
2 document were matched.
2 documents were updated.
7. deleteOne
deleteOne 함수는 조건에 맞는 단일 문서를 삭제한다.
const query = { name: 'Lsiron' };
const result = await collection.deleteOne(query);
console.log(`${result.deletedCount} document was deleted.`);
출력
1 document was deleted.
8. deleteMany
deleteMany 함수는 조건에 맞는 여러 문서를 삭제한다.
const query = { age: { $lt: 30 } };
const result = await collection.deleteMany(query);
console.log(`${result.deletedCount} documents were deleted.`);
출력
2 documents were deleted.
'데이터베이스 > MongoDB' 카테고리의 다른 글
MongoDB 쿼리연산자 (0) | 2024.07.07 |
---|---|
MongoDB 데이터? BSON? (0) | 2024.07.04 |
MongoDB 구조 (0) | 2024.07.04 |
MongoDB IP 화이트리스트 추가, db접속 오류 (0) | 2024.06.16 |