[8장] mongoDB
2022. 5. 22. 17:17ㆍ책/Node.js 교과서
1. SQL vs NoSQL(Not only SQL)
2. DB 및 컬렉션 생성
2.1 데이터베이스 생성
# use [데이터베이스명]
> use nodejs
switched to db nodejs
// 데이터베이스 목록 확인
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
// 현재 사용중인 DB 확인
> db
nodejs
2.2 컬렉션 생성
사실 컬렉션은 따로 생성안해도 도큐먼트를 넣는 순간 자동생성 되기는 한다. 뭐 어쨌든...
# db.createCollection( [컬렉션 이름] )
> db.createCollection('users')
{ "ok" : 1 }
> db.createCollection('comments')
{ "ok" : 1 }
> show collections
comments
users
3. CRUD 작업
사실 공식문서(여기)가서 각 CURD 메서드를 확인하는게 제일 정확한 방법이다 (추가할 옵션들도 구구절절 써져있긴 하니까)
3.1 Create
# db.컬렉션명.save( 도큐먼트 )
> db.users.save({ name: 'zero', age: 24, married: false, comment: 'ㅎㅇ', createdAt: new Date() });
WriteResult({ "nInserted" : 1 })
> db.users.save({ name: 'nero', age: 32, married: true, comment: 'ㅎㅇㅎㅇ', createdAt: new Date() });
WriteResult({ "nInserted" : 1 })
> db.comments.save({ commenter: ObjectId("62807bb8b054954765120d43"), comment: '안녕하신가', createdAt: new Date() });
WriteResult({ "nInserted" : 1 })
3.2 Read
# db.컬렉션명.find( 쿼리, 필드 )
1) 컬렉션 전체 조회
> db.users.find({});
{ "_id" : ObjectId("62807bb8b054954765120d43"), "name" : "zero", "age" : 24, "married" : false, "comment" : "ㅎㅇ", "createdAt" : ISODate("2022-05-15T04:04:08.578Z") }
{ "_id" : ObjectId("62807be1b054954765120d44"), "name" : "nero", "age" : 32, "married" : true, "comment" : "ㅎㅇㅎㅇ", "createdAt" : ISODate("2022-05-15T04:04:49.320Z") }
2) 컬렉션내 특정 필드 조회
각 필드에 대해서 조회여부를 ture/false (혹은 1/0)으로 지정해줄 수 있음
// _id는 필요없고 나머지 name, married는 가져와주셈
> db.users.find({}, { _id: false, name: true, married: true });
{ "name" : "zero", "married" : false }
{ "name" : "nero", "married" : true }
3) 컬력션내 조건에 맞는 특정 필드만 조회
# 자주쓰는 연산자들 : $gt(초과), $gte(이상), $lt(미만), $lte(이하), $ne(같지않음), $or(또는) $in(배열 요소 중 하나)
// age가 30초과이고 기혼인 도큐먼트의 name, age 필드만 가져와주셈
> db.users.find({ age: { $gt: 30}, married: true }, { _id: 0, name: 1, age: 1 });
{ "name" : "nero", "age" : 32 }
// age가 30초과이거나 미혼인 도큐먼트의 name, age 필드만 가져와주셈
> db.users.find({ $or: [ { age: { $gt: 30 } }, { married: false } ] }, { _id: 0, name: 1, married: 1 });
{ "name" : "zero", "married" : false }
{ "name" : "nero", "married" : true }
4) sort, limit, offset
// age기준 오름차순으로 정렬해주셈 ( -1이면 내림차순 )
> db.users.find({}, { _id: 0, name: 1, married: 1 }).sort({ age: 1 });
{ "name" : "zero", "married" : false }
{ "name" : "nero", "married" : true }
// 1개만 가져오기
> db.users.find({}, { _id: 0, name: 1, married: 1 }).sort({ age: 1 }).limit(1);
{ "name" : "zero", "married" : false }
// 2개 단위로 점프점프
> db.users.find({}, { _id: 0, name: 1, married: 1 }).sort({ age: 1 }).limit(2).skip(1)
{ "name" : "nero", "married" : true }
3.3 Update
데이터를 수정할 때 데이터를 통째로 바꾸는 방법(Update)과 일부만 바꾸는 방법(Patch)이 있다는걸 유념하고 보자.
# db.컬렉션명.update( 수정할 도큐먼트, 수정할 내용 [, options] )
> db.users.update({ name: 'nero'}, { $set: { comment: '이 필드만 바꾼다(patch)' } });
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
nMatched : 찾은 도큐먼트 수
nUpserted : 기존에 조건에 맞는 도큐먼트가 없어서 새로 추가해버린 도큐먼트 수
nModified : 수정된 도큐먼트 수
3.4 Delete
# db.users.remove( 쿼리 [, options] )
> db.users.remove({ name: 'zero' })
WriteResult({ "nRemoved" : 1 })
'책 > Node.js 교과서' 카테고리의 다른 글
[8장] mongoDB/ODM (0) | 2022.05.22 |
---|---|
[7장] MySQL/ORM 관계설정 (0) | 2022.05.22 |
[7장] MySQL/ORM (0) | 2022.05.08 |
[7장] MySQL (0) | 2022.05.07 |
[6장] Express / Router (0) | 2022.05.07 |