MySQL과 같은 SQL 데이터베이스와는 다른 유형의 데이터
- NoSQL의 대표주자인 mongoDB(몽고디비)사용
SQL(MySQL) | NoSQL(몽고디비) |
규칙에 맞는 데이터 입력 테이블 간 JOIN 지원 안정성, 일관성 용어(테이블, 로우, 칼럼) | 자유로운 데이터 입력 컬렉션 간 JOIN 미지원 확장성, 가용성 용어(컬렉션, 다큐먼트, 필드) |
- JOIN : 관계가 있는 테이블끼리 데이터를 합치는 기능(몽고디비 aggregate 흉내 가능)
- 빅데이터, 메시징, 세션 관리 등(비정형 데이터)에는 몽고디비 사용하면 좋음
//몽고디비 실행 (아래 경로에서 shift 누르고 오른쪽 마우스 눌러서 powershell 실행
PS C:\Program Files\MongoDB\Server\7.0\bin> ./mongod --ipv6
{"t":{"$date":"2024-08-14T22:56:08.454+09:00"},"s":"I", "c":"NETWORK", "id":4915701, "ctx":"thread1","msg":"Initialized wire specification","attr":{"spec":{"incomingExternalClient":{"minWireVersion":0,"maxWireVersion":21},"incomingInternalClient":{"minWireVersion":0,"maxWireVersion":21},"outgoing":{"minWireVersion":6,"maxWireVersion":21},"isInternalClient":true}}}
//몽고쉘 실행
Please enter a MongoDB connection string (Default: mongodb://localhost/):
Current Mongosh Log ID: 66bcb84be9c5ca3e0a228fb4
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.15
Using MongoDB: 7.0.12
Using Mongosh: 2.2.15
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.
------
The server generated these startup warnings when booting
2024-08-14T22:56:09.973+09:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2024-08-14T22:56:09.973+09:00: This server is bound to localhost. Remote systems will be unable to connect to this server. Start the server with --bind_ip <address> to specify which IP addresses it should serve responses from, or with --bind_ip_all to bind to all interfaces. If this behavior is desired, start the server with --bind_ip 127.0.0.1 to disable this warning
------
test>
// admin 으로 변경
test> use admin
switched to db admin
// root 계정 생성
admin> db.createUser({user:'root', pwd:'manager', roles: ['root']})
{ ok: 1 }
mongod 있는 화면 끄고 다시 재실행
// --auth 붙여서 다시 실행
PS C:\Program Files\MongoDB\Server\7.0\bin> ./mongod --ipv6 --auth
{"t":{"$date":"2024-08-14T23:07:03.228+09:00"},"s":"I", "c":"NETWORK", "id":4915701, "ctx":"thread1","msg":"Initialized wire specification","attr":{"spec":{"incomingExternalClient":{"minWireVersion":0,"maxWireVersion":21},"incomingInternalClient":{"minWireVersion":0,"maxWireVersion":21},"outgoing":{"minWireVersion":6,"maxWireVersion":21},"isInternalClient":true}}}
//몽고쉘 경로에서 shift 누르고 오른쪽 마우스로 파워셀 열고 아래와 같이 root 계정으로 접속
PS C:\Users\john\Downloads\mongosh-2.2.15-win32-x64\mongosh-2.2.15-win32-x64\bin> ./mongosh admin -u root -p manager
Current Mongosh Log ID: 66bcbaa044900f7385228fb4
Connecting to: mongodb://<credentials>@127.0.0.1:27017/admin?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.15
Using MongoDB: 7.0.12
Using Mongosh: 2.2.15
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
------
The server generated these startup warnings when booting
2024-08-14T23:07:03.627+09:00: This server is bound to localhost. Remote systems will be unable to connect to this server. Start the server with --bind_ip <address> to specify which IP addresses it should serve responses from, or with --bind_ip_all to bind to all interfaces. If this behavior is desired, start the server with --bind_ip 127.0.0.1 to disable this warning
------
admin>
컬렉션 생성하기
따로 생성할 필요 없음
- 다큐먼트를 넣는 순간 컬렉션도 자동 생성됨 ( mysql과 비교하며 컬렉션 : 테이블, 다큐먼트 : 데이터 로우)
- 직접 생성하는 명령어도 있음
// 컬렉션 직접 생성하는 명령어 ( db를 nodejs로 잘 선택해서 생성하기)
admin> use nodejs;
switched to db nodejs
nodejs> show dbs;
admin 132.00 KiB
config 108.00 KiB
local 72.00 KiB
nodejs> db
nodejs
nodejs> db.createCollection('users')
{ ok: 1 }
nodejs> db.createCollection('comments')
{ ok: 1 }
nodejs> show collections
comments
users
nodejs>
insert 명령어
// insert 한개는 insertOne, insert 여러개는 insertMany
// 몽고디비는 오타 체크를 안하니 주의하기
nodejs> db.users.insertOne({ name : 'zero', age: 24, married: false, comment: '안녕하세요. 간단히 몽고디비 사용 방법에 대해 알아봅시다.', createdAt: new Date() });
{
acknowledged: true,
insertedId: ObjectId('66bcbdc744900f7385228fb5')
}
nodejs> db.users.insertOne({ name : 'nero', age : 32, married: true, comment: '안녕하세요. zero 친구 nero입니다.', createdAt: new Date() });
{
acknowledged: true,
insertedId: ObjectId('66bcbe7144900f7385228fb6')
}
// 조회하기
nodejs> db.users.find({name:'zero'})
[
{
_id: ObjectId('66bcbdc744900f7385228fb5'),
name: 'zero',
age: 24,
married: false,
comment: '안녕하세요. 간단히 몽고디비 사용 방법에 대해 알아봅시다.',
createdAt: ISODate('2024-08-14T14:23:03.633Z')
}
]
// users에 해당하는 ObjectId를 아래와 같이 복사해서 insert 하는 명령어
nodejs> db.comments.insertOne({ commenter: ObjectId('66bcbdc744900f7385228fb5'), comment: '안녕하세요. zero의 댓글입니다.', createdAt: new Date() });
{
acknowledged: true,
insertedId: ObjectId('66bcbf5d44900f7385228fb7')
}
nodejs>
조회 명령어
// 조회하기 (find는 전체 조회, findOne으로 하나만 조회)
nodejs> db.users.find({});
[
{
_id: ObjectId('66bcbdc744900f7385228fb5'),
name: 'zero',
age: 24,
married: false,
comment: '안녕하세요. 간단히 몽고디비 사용 방법에 대해 알아봅시다.',
createdAt: ISODate('2024-08-14T14:23:03.633Z')
},
{
_id: ObjectId('66bcbe7144900f7385228fb6'),
name: 'nero',
age: 32,
married: true,
comment: '안녕하세요. zero 친구 nero입니다.',
createdAt: ISODate('2024-08-14T14:25:53.749Z')
}
]
nodejs> db.comments.find({});
[
{
_id: ObjectId('66bcbf5d44900f7385228fb7'),
commenter: ObjectId('66bcbdc744900f7385228fb5'),
comment: '안녕하세요. zero의 댓글입니다.',
createdAt: ISODate('2024-08-14T14:29:49.856Z')
}
]
두 번째 인수로 조회할 필드를 선택할 수 있음(1은 추가, 0은 제외)
nodejs> db.users.find({}, {_id : 0, name :1 , married:1 });
[ { name: 'zero', married: false }, { name: 'nero', married: true } ]
첫 번째 인수로 조회 조건 입력 가능
- $gt나 $or같은 조건 연산자 사용
nodejs> db.users.find({ age: {$gt: 30}, married: true }, {_id : 0, name: 1, age: 1 });
[ { name: 'nero', age: 32 } ]
nodejs> db.users.find({ $or: [{ age : {$gt: 30}}, {married : false }]}, {_id : 0, name:1, age: 1});
[ { name: 'zero', age: 24 }, { name: 'nero', age: 32 } ]
update 명령어
nodejs> db.users.updateOne({name :'nero'}, {$set: { comment : '안녕하세요. 이 필드를 바꿔보겠습니다.'}});
{
acknowledged: true, //정상반영
insertedId: null,
matchedCount: 1, //하나를 찾아서
modifiedCount: 1, // 하나를 변경햇다.
upsertedCount: 0
}
delete 명령어
//delete 명령어
nodejs> db.users.deleteOne({name: 'nero'});
{ acknowledged: true, deletedCount: 1 }
// delete 된 것 확인
nodejs> db.users.find({});
[
{
_id: ObjectId('66bcbdc744900f7385228fb5'),
name: 'zero',
age: 24,
married: false,
comment: '안녕하세요. 간단히 몽고디비 사용 방법에 대해 알아봅시다.',
createdAt: ISODate('2024-08-14T14:23:03.633Z')
}
]
'Javascript > Node' 카테고리의 다른 글
노드 교과서 섹션 4 (0) | 2023.08.31 |
---|---|
노드 교과서 섹션 5 (0) | 2023.08.29 |
노드 교과서 섹션 8 (0) | 2023.08.23 |
노드 교과서 섹션 9 (0) | 2023.08.22 |
노드 교과서 섹션 10 (0) | 2023.08.19 |