Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 큐넷 폐업 사대보험 미가입
- 큐넷 4대보험미가입
- 큐넷 시험장소 변경
- eslint prettier차이
- 경기도광명맛집추천
- 큐넷 시험 변경
- 정보처리기사 시험장도 변경
- vue 설정
- 벤큐 EX2510
- vue eslint설정
- HTML CSS Support
- 시험장소변경
- 큐넷 4대보험
- 큐넷 사실확인서
- 큐넷 폐업
- 4대보험미가입 경력증명서
- EX2510S음질
- vue 로그인
- 광명김치찌개
- BENQ EX2510S REVIEW
- 큐넷 필기시험장소 변경
- 벤큐 EX2510S 후기
- vue.js 로그인
- 광명돼지집
- 경기도광명돼지집
- vuetify 설치
- 벤큐 EX2510S
- 큐넷 사대보험
- vue prettier
- 서울근교두루치기
Archives
- Today
- Total
코딩 발걸음 - 한발두발개발
Mongoose를 이용한 CRUD 본문
728x90
기본 스키마 정의
http Request 를 이용하여 mongoDB에 CRUD 테스트를 해보겠습니다.
1. CREATE = save (AutoIncrement 사용)
var mongoose = require('mongoose');
//*mongoose autoincrement 모듈 사용 npm install mongoose-auto-increment
var autoincrement = require('mongoose-auto-increment');
autoincrement.initialize(mongoose.connection);
//mongoose 스키마 객체 정의
var userSchema = new mongoose.Schema(
{
//AutoIncrement를 이용하여 seq에 데이터를 넣을 예정 기본값 0
seq : Number,
user_id : String,
user_name : String,
user_age : Number,
//now date 를 넣기 위해 기본적으로 아래 주석 처럼 쓰긴하나
//request_time : {type : Date , Default : Date.now() }
//보기 좋은 Date 형태를 위해 String으로 정의하여 date를 Format하여 넣을 예정
request_time : String
},
{
//mongoose를 이용하여 데이터를 insert하면 자동적으로 __v 라는 컬럼이 생김
//versionKey : false를 사용하면 나오지 __v라는 컬럼이 생기지 않는다.
versionKey: false
}
);
//auto-increment 스키마 객체 정의
var autoField = {
//적용할 모델 명
model : 'user_history',
//적용할 컬럼
field : 'seq',
//시작할 num
startAt : 1,
//증가할 num
increment : 1,
};
//정의한 키마에 autoincrement스키마 플러그인
userSchema.plugin(autoincrement.plugin, autoField);
//data 객체 정의
var data = {
user_id : req.query.user_id,
user_name : req.query.user_name,
user_age : req.query.user_age,
request_time : getFormatDate(new Date())
};
//param 부분 다시 알아봐야함
//param 1. 모델명 - 기본적으로 컬렉션을 복수형으로 생성하지만 생성하기 싫으면 param3의 collection명을 지정해줘야 함
//param 1. 예) param3에서 컬렉션명을 지정하지 않을 경우 'user_history -> user_histories'로 컬렉션을 생성하고 create함
//param 2. 적용할 스키마
//param 3. collection명
//mongoose를 이용한 user_history객체 생성
var userHistory = mongoose.model('user_history', userSchema,'user_history');
var doc = new userHistory(data);
//save함수로 iunsert를 한다.
//http://localhost:8913/insertUserHistory?user_id=test123&user_name=홍길동&user_age=45 일 경우
//mongoDB Query : db.login_history.insert({ seq : seq, user_id : 'test123' , user_name : '홍길동', user_age :NumberInt(45) , request_time : request_time})
//mysql Query : INSERT INTO db.login_history(seq, user_id, user_name, user_age, request_time) VALUES(seq, user_id, user_name, user_age, request_time)
doc.save(function (err, result) {
if (err) {
console.log(err);
} else {
console.log(result);
}
});
//date format 출처 : https://developer0809.tistory.com/74
function getFormatDate (date) {
let year = date.getFullYear();
let month = date.getMonth() + 1;
month = month >= 10 ? month : '0' + month;
let day = date.getDate();
day = day >= 10 ? day : '0' + day;
let hour = date.getHours();
hour = hour >= 10 ? hour : '0' + hour;
let min = date.getMinutes();
let sec = date.getSeconds();
sec = sec >= 10 ? sec : '0' + sec;
let purchaseDay = year + '-' + month + '-' + day + ' ' + hour + ':' + min + ':' + sec;
return purchaseDay;
}
2. READ = find()
var mongoose = require('mongoose');
//mongoose 스키마 객체 정의
var userSchema = new mongoose.Schema(
{
//AutoIncrement를 이용하여 seq에 데이터를 넣을 예정 기본값 0
seq : Number,
user_id : String,
user_name : String,
user_age : Number,
//now date 를 넣기 위해 기본적으로 아래 주석 처럼 쓰긴하나
//request_time : {type : Date , Default : Date.now() }
//보기 좋은 Date 형태를 위해 String으로 정의하여 date를 Format하여 넣을 예정
request_time : String
},
{
//mongoose를 이용하여 데이터를 insert하면 자동적으로 __v 라는 컬럼이 생김
//versionKey : false를 사용하면 나오지 __v라는 컬럼이 생기지 않는다.
versionKey: false
}
);
//get으로 받은 데이터
var user_id = req.query.user_id;
var user_age = req.query.user_age;
var user_name = req.query.user_name;
//조건 객체 생성
var fWhere = {
user_id : {$regex : '.*' + user_id + '.*'}
};
//param 부분 추가 공부
//param 1. 모델명
//param 2. 적용할 스키마
//param 3. collection명
//mongoose를 이용한 userHistory객체 생성
var userHistory = mongoose.model('user_history', userSchema,'user_history');
//param 1. 조건
//param 2. callback
//http://localhost:8913/findUserHistory?user_id=test123
//mogoDB Query : db.user_history.find({ user_id: { '$regex': '.*abc.*' } })
//MySQL Query : SELECT * FROM db.user_history WHERE user_id LIKE '%abc%'
userHistory.find( fWhere, function (err, result) {
if (err) {
console.log(err);
} else {
console.log(result);
}
});
3. UPDATE = updateMany() , updateOne()
var mongoose = require('mongoose');
//mongoose 스키마 객체 정의
var userSchema = new mongoose.Schema(
{
//AutoIncrement를 이용하여 seq에 데이터를 넣을 예정 기본값 0
seq : Number,
user_id : String,
user_name : String,
user_age : Number,
//now date 를 넣기 위해 기본적으로 아래 주석 처럼 쓰긴하나
//request_time : {type : Date , Default : Date.now() }
//보기 좋은 Date 형태를 위해 String으로 정의하여 date를 Format하여 넣을 예정
request_time : String
},
{
//mongoose를 이용하여 데이터를 insert하면 자동적으로 __v 라는 컬럼이 생김
//versionKey : false를 사용하면 나오지 __v라는 컬럼이 생기지 않는다.
versionKey: false
}
);
//get으로 받은 데이터
var user_id = req.query.user_id;
var user_age = req.query.user_age;
var user_name = req.query.user_name;
//조건 객체 생성
var uWhere = {
user_id : user_id,
//gt : 초과, gte : 이상, lt : 미만, lte : 이하
user_age : {$gte : user_age}
};
//변경값 객체 생성
var uSet = {
user_name : user_name,
request_time : getFormat(new Date())
};
//param 부분 다시 알아봐야함
//param 1. 모델명
//param 2. 적용할 스키마
//param 3. collection명
//mongoose를 이용한 userHistory객체 생성
var userHistory = mongoose.model('user_history', userSchema,'user_history');
//updateOne() = 최초발견 하나만 업데이트
//updateMany() = 여러개 삭제
//param 1. 조건 값
//param 2. 업데이트 값
//param 3. callback
//http://localhost:8913/updateUserHistory?user_id=test123&user_age=45&user_name=김변경 일 경우
//mogoDB Query : db.user_history.updateMany({user_id : 'test123' , user_age : {$gte : 45}},{$set : {user_name : '김변경'}})
//MySQL Query : UPDATE db.user_history SET user_name = '김변경', request_time = request_time WHERE user_id LIKE 'test123' AND user_age >= 45
//참고로 mongodb 내에서 update쿼리를 사용할 때 $set을 사용하지 않을 경우 user_name이 김변경으로 변경 되고 나머지 컬럼값이 삭제 되니 주의하셔야 합니다.
userHistory.updateMany(uWhere,uSet,function (err, result) {
if (err) {
console.log(err);
}
else {
console.log(result);
}
});
//date format 출처 : https://developer0809.tistory.com/74
function getFormatDate(date){
let year = date.getFullYear();
let month = date.getMonth() + 1;
month = month >= 10 ? month : '0' + month;
let day = date.getDate();
day = day >= 10 ? day : '0' + day;
let hour = date.getHours();
hour = hour >= 10 ? hour : '0' + hour;
let min = date.getMinutes();
let sec = date.getSeconds();
sec = sec >= 10 ? sec : '0' + sec;
let purchaseDay = year + '-' + month + '-' + day + ' ' + hour + ':' + min + ':' + sec;
return purchaseDay;
}
4. DELETE = deleteOne(), deleteMany()
var mongoose = require('mongoose');
//mongoose 스키마 객체 정의
var userSchema = new mongoose.Schema(
{
//AutoIncrement를 이용하여 seq에 데이터를 넣을 예정 기본값 0
seq : Number,
user_id : String,
user_name : String,
user_age : Number,
//now date 를 넣기 위해 기본적으로 아래 주석 처럼 쓰긴하나
//request_time : {type : Date , Default : Date.now() }
//보기 좋은 Date 형태를 위해 String으로 정의하여 date를 Format하여 넣을 예정
request_time : String
},
{
//mongoose를 이용하여 데이터를 insert하면 자동적으로 __v 라는 컬럼이 생김
//versionKey : false를 사용하면 나오지 __v라는 컬럼이 생기지 않는다.
versionKey: false
}
);
//get으로 받은 데이터
var user_id = req.query.user_id;
var user_name = req.query.user_name;
//조건 객체 생성
var dWhere = {
user_id : user_id,
user_name : user_name
};
//param 부분 다시 알아봐야함
//param 1. 모델명
//param 2. 적용할 스키마
//param 3. collection명
//mongoose를 이용한 userHistory객체 생성
var userHistory = mongoose.model('user_history', userSchema,'user_history');
//deleteOne() = 최초발견 하나만 삭제
//deleteMany() = 여러개 삭제
//param 1. 조건 값
//param 2. 업데이트 값
//param 3. callback
//http://localhost:8913/deleteUserHistory?user_id=abc123&user_name=황태은 일 경우
//mogoDB Query : db.user_history.deleteMany({ user_id: 'abc123', user_name: '황태은' })
//MySQL Query : DELETE FROM db.user_history WHERE user_id LIKE 'abc123' AND user_name LIKE '황태은'
userHistory.deleteMany(dWhere,function (err, result) {
if (err) {
console.log(err);
} else {
console.log(result);
}
});