몽고디비를 처음 사용하면서 알게 된 쿼리들에 대해서 정리한 글입니다.
✨ 이 글을 읽기 전 참고하면 좋은 글
데이터베이스, 도큐먼트
먼저 저는 몽고디비 콤파스에서 쿼리들을 테스트해보겠습니다.
use 데이터베이스이름
use study 는 study라는 이름의 db를 만들거나, 기존에 있던 데이터베이스를 선택하는 명령입니다.
use study 명령 이후 switched to db study라는 메세지가 출력되면 정상적으로 실행된 것입니다.
CRUD
생성(Create)
도큐먼트 추가하기
db.컬렉션명.insertOne()
db.users.insertOne({ name: "Anna", age: 18, married: false, comment: "안녕하세요. 만나서 반가워요.", created_at: new Date()})
use를 사용해서 db를 만들어도 콤파스에서 보이지 않을 것입니다. 왜냐하면 도큐먼트가 없기 때문입니다.
MySQL의 테이블은 몽고디비에서 콜렉션(Collection)
MySQL의 칼럼은 몽고디비에서 필드(Field)
MySQL의 로우는 몽고디비에서 도큐먼트(Document)
라고 칭합니다.
위 명령에서 users 콜렉션에 하나의 도큐먼트를 추가하였습니다.
{
name: "Anna",
age: 18,
married: false,
comment: "안녕하세요. 만나서 반가워요.",
created_at: new Date()
}
위 데이터를 도큐먼트라고 하는데요, json 형식으로 되어 있습니다만, json에서는 볼 수 없는 것이 있습니다.
new Date()는 현재 시간을 입력하라는 뜻입니다.
명령이 실행되면 터미널에 위처럼 출력됩니다. 실패한 경우에는 에러 내용이 응답으로 옵니다.
콤파스에서도 도큐먼트가 생성된 것을 보실 수 있습니다.
여기서 _id는 터미널의 출력된 메세지 중 insertedId와 같은데요, 이 오브젝트 아이디가 데이터를 검색할 때 쓰이는 키입니다.
컬렉션만 추가하기
위처럼 바로 도큐먼트 데이터를 추가하는 것이 아니라, 도큐먼트가 없는 빈 콜렉션을 만들 수 있습니다.
db.createCollection("콜렉션 이름") >> 형식
db.createCollection("comments") >> 예시
위 명령을 통해서 콜렉션만 만들 수 있습니다.
응답 메세지는 "{ ok: 1 }" 가 출력됩니다.
아무것도 없는 콜렉션이 만들어 진 것을 확인할 수 있습니다.
여러 도큐먼트 추가하기
앞서 보여드린 insertOne은 하나의 도큐먼트만 추가하였습니다.
db.users.insertMany([
{ 데이터 1 },
{ 데이터 2 }
]);
db.users.insertMany([
{ name: "Bob", age: 25, married: true, comment: "안녕하세요. 나는 Bob입니다.", created_at: new Date() },
{ name: "Charlie", age: 30, married: true, comment: "안녕하세요. 날씨가 좋네요.", created_at: new Date() }
]);
위처럼 insertMany로 여러 데이터를 추가할 수 있습니다.
응답 메세지로 오브젝트 아이디도 추가한 데이터에 대해 알 수 있습니다.
조회(Read)
컬렉션 조회하기
show collections
위 명령으로 현재 db의 콜렉션들을 조회할 수 있습니다.
콜렉션의 모든 데이터 조회
db.콜렉션이름.find()
db.users.find()
콜렉션에 있는 모든 데이터를 조회할 수 있습니다.
조건에 맞는 데이터 조회
db.콜렉션이름.find({ 찾을필드: 값, ...})
db.users.find({ name: "Anna" })
위 명령을 통해서 조건에 맞는 데이터만 찾을 수 있습니다.
예시로 보여드린 쿼리는 name이 "Anna"인 도큐먼트를 검색합니다.
데이터의 특정 필드만 조회하기
db.콜렉션이름.find(조건, { 찾을 필드 })
db.users.find({}, { _id: 0, name: 1 })
find의 첫 번째 매개변수는 찾을 데이터의 조건, 두 번째 매개변수에는 조회할 필드를 지정할 수 있습니다.
_id는 따로 지정하지 않으면 1이기 때문에 0으로 바꾸어 조회하지 않고, name의 값을 1로 하여 name만 조회합니다.
위처럼 첫 번째 매개변수 자리에 {} 를 입력하면 아무 조건도 적용되지 않아 모든 데이터를 적용할 수 있습니다.
수정(Update)
db.콜렉션이름.updateOne(
{ 수정할 도큐먼트를 찾기 위한 조건 },
{ $set: { 수정할 내용 }
)
db.users.updateOne(
{ name: "Anna" }, // 수정할 도큐먼트를 찾기 위한 조건
{ $set: { comment: "좋은 하루 보내세요." } } // 수정할 내용
)
위는 name이 "Anna"인 도큐먼트의 comment를 "좋은 하루 보내세요." 로 수정하는 쿼리입니다.
데이터가 성공적으로 변경되면 아래와 같은 출력 결과를 확인할 수 있습니다.
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
이 메세지에서
- acknowlege: 업데이트 작업이 몽고디비 서버에 성공적으로 전달되고 확인되었는지의 여부
- insertedId: 새로운 도큐먼트를 추가한 경우에만 해당 도큐먼트의 '_id' 값이 여기에 들어감. 업데이트의 경우에는 null]
- matchedCount: 지정된 조건과 일치하는 도큐먼트의 수
- modifiedCount: 실제로 업데이트가 적용된 도큐먼트의 수
- upsertedCount: upsert 작업이 수행된 경우 적용된 도큐먼트의 수
- upsert는 일치하는 도큐먼트가 없어서 새로운 도큐먼트를 추가한 경우를 의미함.
삭제 (Delete)
db.콜렉션이름.remove({ 삭제할 도큐먼트 검색 조건 })
db.users.remove({ name: "Bob" })
조건에 맞는 도큐먼트를 삭제합니다. 조건에 {}를 입력하면 모든 도큐먼트가 삭제됩니다.
읽어주셔서 감사합니다.
'DB > MongoDB' 카테고리의 다른 글
[MongoDB] 몽고디비 데이터 관계 모델링 Reference VS Embedding (0) | 2024.02.05 |
---|---|
[MongoDB] MacOS에서 몽고디비와 컴퍼스 설치하기 (0) | 2023.12.21 |
[MongoDB] NoSQL, 몽고디비 알아보기 (0) | 2023.12.17 |