Studio 3T의 GUI를 통해 MongoDB에 저장된 데이터를 관리
1.수동으로 연결 선택
2.New Connection 버튼 클릭
db.mongodb_prac.insertOne({ key: "value", key2: "값" })
ObjectId | key | key 2 |
---|---|---|
639a9b... | value | 값 |
db.mongodb_prac.find({})
보여진 데이터에서 오른쪽 클릭 -> Document → View Document
ObjectId 추출
db.mongodb_prac.deleteOne({ _id: ObjectId(db.mongodb_prac.deleteOne({ _id: ObjectId("...")}))})
코드에서 DB Client 역할
npm install mongoose
MongoDB에서 가지고 있는 각 데이터 하나하나를 문서(Document)라고 정의
{
"_id": ObjectId("6682192a1c155bd2f27881"),
"name": "lyw",
}
null
: null 값과 존재하지 않는 필드null
String
: 문자열“mongoDB”
Number
: 숫자3.14
Date
: 날짜new Date()
Buffer
: 파일을 담을 수 있는 버퍼, UTF-8이 아닌 문자열을 저장0x65
Boolean
: true
or false
true
ObjectId
(Schema.Types.ObjectId) : 객체 ID, 주로 다른 객체를 참조할 때 넣음ObjectId()
Array
: 배열 형태의 값["a", "b", "c"]
.
├── app.js
├── routes
│ ├── carts.js
│ └── goods.js
└── schemas
├── index.js
├── cart.js
└── goods.js
const mongoose = require("mongoose");
mongoose.set('strictQuery', true);
const connect = () => {
mongoose
.connect("mongodb://localhost:27017/spa_mall")
.catch(err => console.log(err));
};
mongoose.connection.on("error", err => {
console.error("몽고디비 연결 에러", err);
});
module.exports = connect;
mongoose.set('strictQuery', true);
-> Mongoose Deprecation Warning "the strictQuery" 대응
const mongoose = require("mongoose");
// 스키마 내용 정의
const goodsSchema = new mongoose.Schema({
goodsId: {
type: Number, // 자료형 타입
required: true, // 값이 있어야 하는가 설정
unique: true // 고유한 값이 있어야 하는가 설정
},
name : {
type: String,
required: true,
unique: true
},
thumbnailUrl: {
type: String
},
category: {
type: String
},
price: {
type: Number
}
});
module.exports = mongoose.model("Goods", goodsSchema);
각 요소마다 데이터 특성을 정의한다.
const goodsRouter = require('./routes/goods.js'); //goods.js 를 가져온다.
const connect = require("./schemas");
connect();
//전역 미들웨어에 적용하겠다.
app.use(express.json());
// api 경로가 추가 된 경우 모두 goodsRouter 로 통해서 간다.
app.use("/api", goodsRouter)
require 로 schemas 의 있는 폴더를 모두 읽고
connect(); 함수로 바로 실행시킨다.
json()으로 정의된 전역 미들웨어는 /api 보다 위에 있어야한다.
//데이터베이스 가져오기 때문에 동기로 실행
router.post("/goods", async (req,res) => {
const { goodsId, name, thumbnailUrl, category, price } = req.body;
//동기적으로 중복 처리
const goods = await Goods.find({goodsId});
if (goods.length){
return res.status(200).json({
success:false,
errorMessage:"이미 존재하는 GoodsId 입니다."
});
}
const createdGoods = await Goods.create({ goodsId, name, thumbnailUrl, category, price });
})
데이터를 넣었을 때, 중복처리
POST 로 설정 후 body 에 데이터 입력했을 때,
{
"goodsId": 2,
"name": "시원한 콜라",
"thumbnailUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRk7JqMw7ZYZP4ZW136wcoMTmLzbrMIJzUWb1Dhu9cHwCPp0gA&usqp=CAc",
"category": "drink",
"price": 3000
}
결과값
{
"success": false,
"errorMessage": "이미 존재하는 GoodsId 입니다."
}
내가 넣었던 중복확인 결과값으로 메세지 출력