따로 서비스에서 몽고디비조회나 update 만들어 진건 없고.. 간단하게 처리할겸 샘플소스 만들어보았다.
mongoose 연결, 스키마생성, select, updateAll 이해하기엔 좋을 것 같다.
const mongoose = require(mongoose);
const test = async () => {
const dbURI = `mongodb://{id}:{pw}@{ip}:{port}/{dbname}`; // 몽고디비 연결 URI
mongoose.connect(dbURI, {
useCreateIndex: true,
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
});
const { connection } = mongoose; // 커넥션 저장
connection.on('error', console.error.bind(console, 'connection error:'));
// 연결됨 console 출력
connection.once('open', () => {
console.info('MongoDB connected');
});
const basicConstraints = { type: String, require: true };
// 스키마 생성
const testschema = new mongoose.Schema(
{
name: basicConstraints,
nick: basicConstraints
},
{ timestamps: true }
);
// 몽구스 모델 스키마매칭
const process = mongoose.model('testSchema',testschema);
// 이름으로 검색
const changeTest = async () => {
const filter = {name: "김철수"};
let res;
try {
res = await process
.find(filter)
.then((result) => {
// 여기에 필터링 더 있음.
return result;
})
.catch((err) => {
console.error(`changeTest error : ${err}`);
});
} catch (err) {
console.error(`changeTest error : ${err}`);
}
return res.map(e => e.nick);
};
const result = await changeTest();
console.log(JSON.stringify(result));
}
test();
여기까지는 select 해오는 테스트.
const changeTest = async () => {
const filter = {name: "김철수"};
let res;
try {
res = await process
.updateMany(filter,{nick: "none"})
.then((result) => {
// 여기에 필터링 더 있음.
return result;
})
.catch((err) => {
console.error(`changeTest error : ${err}`);
});
} catch (err) {
console.error(`changeTest error : ${err}`);
}
return res;
};
이건 updateAll 테스트.
log부분은 원래 winston logger썼는데 그대로 실행하면 winston 없어 에러날테니 그냥 console찍는걸로 수정했다.