1. collection을 만들고 document를 생성하는 방법
(collection은 관계형 데이터의 table과 같고 document는 row와 같다.)
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/database') // 이름을 정해줄 수 있다.
.then(() => console.log('몽고디비가 연결됐습니다.'))
.catch((error) => console.log('몽고디비 연결에 실패했습니다.', error));
const schema = new mongoose.Schema({ // 데이터 타입
name: String,
level: Number,
hobby: [ String ],
date: { type: Date, default: Date.now }, // 날짜를 알아서 생성해준다.
isCashed: Boolean
});
// 클래스를 정의한다.
const Users = mongoose.model('Users', schema);
async function createUsers() {
// 인스턴스를 만들고
const users = new Users({
name: 'socratone',
level: 1,
hobby: ['javascript', 'english'],
isCashed: true
});
// 저장한다.
const result = await users.save();
console.log(result);
}
createUsers();
2. 저장된 데이터를 필터링해서 불러오는 방법
async function getUsers() {
const users = await Users
.find({ name: 'socratone', isCashed: true })
.limit(10)
.sort({ name: 1 })
.select({ name: 1, hobby: 1 });
console.log(users);
}
getUsers();
3. 비교 연산자를 이용해서 불러오는 방법
위의 예제에서 find 부분을 바꿔준다면
// 1 <= level <= 10 사이의 데이터를 불러온다.
.find({ level: { $gte: 1, $lte: 10 } })
// level이 1, 5, 10인 데이터를 불러온다.
.find({ level: { $in: [1, 5, 10] } })
그밖에도 쓸 수 있는 연산자는 다음과 같다.
eq // equal
ne // not equal
gt // greater than
gte // greater than or equal
lt // less than
lte // less than or equal
in
nin // not in
4. and와 or를 이용해서 불러오는 방법
// find 뒤에 or를 넣어서 두 가지 경우 중 하나라도 해당되는 데이터를 모두 가져온다.
.find()
.or([ { name: 'socratone' }, { isCashed: true } ])
// and를 넣어서 두 가지 경우에 해당하는 데이터를 모두 가져온다.
.find()
.and([ { name: 'socratone' }, { isCashed: true } ])
5. 정규식을 이용해서 불러오는 방법
// socratone이라는 글자로 시작하는 경우
.find({ name: /^socratone/ })
// socratone이라는 글자로 끝나는 경우
.find({ name: /socratone$/ })
// socratone이라는 글자를 포함하는 경우
.find({ name: /.*socratone.*/ })
// 제일 끝에 i를 붙이면 대소문자를 구별하지 않는다.
.find({ name: /.*socratone.*/i })
6. 데이터의 개수를 확인하는 방법
// select대신 count()를 쓴다.
// .select({ name: 1, hobby: 1 });
.count();
7. 페이지 구현
다음의 skip과 limit으로 페이지에 해당하는 부분만 보여줄 수 있다.
.skip((pageNumber - 1) * pageSize)
.limit(pageSize)
8. 업데이트 1 - querry first
데이터를 찾아서 새로 저장해 업데이트하는 방법
async function updateUsers(id) {
const users = await Users.findById(id);
if (!users) return;
users.isCashed = true;
users.name = 'soc';
const result = await users.save();
console.log(result);
}
9. 업데이트 2 - update first
데이터를 바로 업데이트 하는 방법
async function updateUsers(id) {
const users = await Users.findByIdAndUpdate(id, { // 값을 받을 필요가 없으면 update 메소드를 써도 된다.
$set: { // set 이외의 operator는 아래 링크를 참고
name: 'soc',
isCashed: true
}
}, { new: true }); // new에 true를 설정해주면 이전의 값이 아닌 바뀐 값을 users에 담는다.
console.log(users);
}
참고 : https://docs.mongodb.com/manual/reference/operator/update/
10. 삭제
async function removeUsers(id) {
const result = await Users.deleteOne({ _id: id }); // 여러개를 지우려면 deleteMany 메소드를 쓴다.
}
'Database > MongoDB' 카테고리의 다른 글
mongoose에서 잘못된 id가 들어왔을 때 에러 핸들링 (0) | 2020.07.06 |
---|---|
mongoose collection의 관계 설정 (0) | 2020.07.05 |
mongoose의 유용한 schema type option (0) | 2020.07.05 |
mongoose를 이용한 validate 설정 (1) | 2020.07.05 |
맥에서 MongoDB 설치하는 방법 (0) | 2020.07.01 |