데이터(data)는 정보나 사실들의 원시적이고 구조화되지 않은 형태입니다. 이것은 숫자, 문자, 이미지, 소리 등 다양한 형태로 나타날 수 있습니다. 예를 들면, 온도 측정 결과, 사진, 글, 음성 녹음 파일 등이 데이터에 해당합니다.
데이터베이스(database)는 관련된 데이터를 체계적으로 저장하고, 관리하고, 검색할 수 있도록 설계된 전자적 시스템입니다. 간단히 말하면, 데이터베이스는 "정보의 보관소"와 같습니다. 데이터베이스를 사용하면 크거나 작은 양의 데이터를 안전하게 저장하고 필요할 때 쉽게 찾아낼 수 있습니다.
DBMS는 데이터베이스 관리 시스템(Database Management System)의 약자입니다. DBMS는 데이터베이스를 생성하고, 유지하고, 조작하기 위한 소프트웨어 도구의 집합입니다. 일반적으로 DBMS는 두 가지 유형으로 나뉩니다.
데이터를 테이블 형태로 저장하며, 테이블 간의 관계를 정의할 수 있는 시스템입니다. 예로는 Oracle, MySQL, Microsoft SQL Server, PostgreSQL 등이 있습니다.
관계형 모델을 사용하지 않는 데이터베이스 시스템으로, 큰 데이터 량이나 유동적인 데이터 구조를 지원하기 위해 설계되었습니다. 예로는 MongoDB, Cassandra, Redis 등이 있습니다.
데이터베이스 관리 시스템을 매월 검색엔진에서 노출 빈도 등 다양한 요소로 DB를 평가하여 순위를 지정해 주는 사이트
https://db-engines.com/en/ranking
DB-Engines Ranking
Popularity ranking of database management systems.
db-engines.com
MongoDB(몽고디비)는 NoSQL 데이터베이스 시스템 중 하나로, 문서 지향(document-oriented) 데이터베이스입니다. 이는 관계형 데이터베이스와는 다르게 데이터를 테이블이 아니라 JSON 스타일의 BSON(Binary JSON) 형식의 문서로 저장합니다. MongoDB는 개발자가 유연하게 데이터를 저장하고 쿼리할 수 있도록 하는 목적으로 만들어진 것이며, 대규모의 분산 데이터베이스 환경에서도 잘 동작합니다.
MongoDB는 데이터를 BSON 형식의 문서로 저장합니다. 이 문서는 키-값 쌍(key-value pairs)으로 이루어져 있으며, 여러 종류의 데이터 유형을 포함할 수 있습니다.
관계형 데이터베이스와 달리 MongoDB는 데이터베이스의 스키마를 명시적으로 정의하지 않습니다. 이는 동적인 스키마를 사용하여 데이터 모델을 유연하게 변경할 수 있도록 합니다.
MongoDB는 다양한 데이터 형식을 지원하며, 중첩된 문서와 배열을 허용하여 복잡한 데이터 구조를 표현할 수 있습니다.
MongoDB는 여러 서버에 데이터를 분산하여 저장하고 처리할 수 있는 분산 데이터베이스 시스템을 지원합니다.
MongoDB Cloud는 MongoDB 데이터베이스를 클라우드 환경에서 제공하는 서비스입니다. MongoDB Cloud는 MongoDB, Inc.가 제공하는 공식 클라우드 서비스로서, MongoDB를 쉽게 관리하고 배포할 수 있도록 도와줍니다. 이 서비스는 데이터베이스 클러스터를 호스팅하고 관리하며, 사용자는 몽고DB 클라우드를 통해 데이터베이스를 쉽게 설정하고 확장할 수 있습니다.
https://www.mongodb.com/atlas/database
MongoDB Atlas Database | Multi-Cloud Database Service
The multi-cloud database service at the heart of our developer data platform that accelerates and simplifies how you build with data. Try MongoDB Atlas today!
www.mongodb.com
Studio 3T는 MongoDB를 위한 강력한 GUI(그래픽 사용자 인터페이스) 도구로, 개발자와 데이터 분석가가 데이터베이스를 보다 쉽게 탐색하고 관리할 수 있도록 도와줍니다. SQL 스타일의 쿼리 변환 기능, 시각적인 집계 파이프라인 빌더, 데이터 임포트/익스포트, 스키마 뷰 및 IntelliShell 같은 기능을 제공하여 MongoDB의 복잡한 작업을 효율적으로 처리할 수 있게 해줍니다. 초보자부터 전문가까지 다양한 사용자가 GUI 기반으로 쿼리를 실행하고 데이터를 시각화하며, 테스트와 디버깅을 손쉽게 할 수 있도록 설계된 도구입니다.
https://studio3t.com/download/
Try MongoDB Tools - Download Free Here
Free download for MongoDB tools to do more with your database. MongoDB Shell, Compass, CLI for Cloud, BI Connector and other database tools available.
www.mongodb.com
show databases
use aiproject
db.createCollection("user")
show collections
db.user.insertOne({userid: "apple", name: "김사과", age: 20})
db.user.insertOne({name:"김사과", age:20, job:"프로그래머"})
db.user.insertOne({name:"배애리", age:29, gender:"여자"})
db.user.insertOne({name:"배애리", age:29, gender:"여자"})
db.user.find()
db.user.find().pretty()
db.user.insertMany([
{name:"반하나", age:25, job:"공무원"},
{name:"이메론", age:30, job:"의사"},
{name:"오렌지", age:33, job:"교직원"}
])
db.user.updateOne({name:'반하나'}, {$set:{age:22}})
db.user.updateMany({name:"배애리"}, {$set:{age:27}})
db.user.deleteOne({name:'오렌지'})
db.user.drop()
db.dropDatabase()
$eq | 같다 (equal) | { age: { $eq: 20 } } |
$ne | 같지 않다 (not equal) | { age: { $ne: 20 } } |
$gt | 크다 (greater than) | { age: { $gt: 20 } } |
$gte | 크거나 같다 | { age: { $gte: 20 } } |
$lt | 작다 (less than) | { age: { $lt: 20 } } |
$lte | 작거나 같다 | { age: { $lte: 20 } } |
// 여러문서 추가하기
db.students.insertMany([
{name:"김사과", age:20, major:"컴퓨터공학", grade:3.8},
{name:"반하나", age:23, major:"수학", grade:3.4},
{name:"오렌지", age:25, major:"물리", grade:3.6},
{name:"이메론", age:30, major:"수학", grade:3.9},
{name:"채애리", age:33, major:"컴퓨터공학", grade:3.2}
])
// 모든 문서 보기
db.students.find()
// 나이가 23살인 학생
db.students.find({age:23})
// 나이가 21살보다 많은 학생
db.students.find({age:{$gt:21}})
// 컴퓨터공학 전공이 아닌 학생
db.students.find({major:{$ne:"컴퓨터공학"}})
// 나이가 21세 이상이면서 전공이 수학인 학생
db.students.find({
$and: [
{age:{$gte:21}},{major:"수학"}
]
})
// 나이가 20세이거나 전공이 물리인 학생
db.students.find({
$or: [
{age:20}, {major: "물리"}
]
})
// 전공이 수학 또는 물리인 학생
db.students.find({
major: { $in:["수학", "물리"]}
})
1 | 오름차순 (ASC) |
-1 | 내림차순 (DESC) |
// 나이로 내림차순 정렬
db.students.find().sort({ age:-1 })
// 성적으로 오름차순 정렬
db.students.find().sort({ grade: 1 })
// 상위 2명만 보기
db.students.find().limit(2)
// 2명을 건너뛰고 나머지 보기
db.students.find().skip(2)
// 전공이 수학 또는 물리인 학생 중 성적이 3.3 이상인 학생을 성적 높은 순으로 2명만 조회
db.students.find({
$and: [
{major: { $in: ["수학", "물리"] }},
{grade: { $gte: 3.3 }}
]
}).sort({ grade: -1 }).limit(2)
MongoDB에서 ObjectId는 각 문서(document)의 12바이트(24자리 16진수(hex))고유한 ID로 사용되는 데이터 타입입니다. SQL의 기본키(Primary Key)와 비슷한 역할을 합니다. MongoDB는 각 문서에 _id 필드를 기본적으로 생성하며, 특별히 지정하지 않으면 자동으로 ObjectId 형태로 생성됩니다.
db.students.find({ _id: ObjectId("681c0c1961515a3f4a441534")})
db.students.find()
db.students.updateOne({ _id: ObjectId("681c0c1961515a3f4a441536")},
{ $set: {name:"채리"}})
ObjectId("681c0c1961515a3f4a441536").getTimestamp()
여러 문서를 그룹화하거나, 통계/요약/변환된 결과를 만들어내는 복잡한 데이터 처리 도구입니다. SQL의 GROUP BY, SUM(), AVG(), JOIN 등과 비슷한 역할을 합니다. 여러 문서를 묶어서 계산하거나 새로운 형식으로 가공된 데이터를 만들고 통계, 분석, 리포트 등에 활용할 수 있는 기능입니다.
$match | 조건으로 필터링 (find와 비슷) |
$group | 필드로 그룹화하고 통계 계산 |
$project | 필드를 선택하거나 계산된 필드를 생성 |
$sort | 정렬 |
$limit | 개수 제한 |
$skip | 건너뛰기 |
$lookup | 다른 컬렉션과 조인 |
$unwind | 배열을 펼치기 |
db.users.insertMany([
{
_id: 1,
name: "김사과",
age: 20,
gender: "여",
joinDate: ISODate("2023-01-10T00:00:00Z"),
tags: ["몽고DB", "집계"],
orders: [
{ orderId: 101, amount: 200000, orderDate: ISODate("2024-01-15T00:00:00Z") },
{ orderId: 102, amount: 450000, orderDate: ISODate("2024-03-22T00:00:00Z") }
],
products: [
{ productId: "p1", category: "전자제품", price: 500000, rating: 4.8 },
{ productId: "p2", category: "의류", price: 50000, rating: 4.2 }
]
},
{
_id: 2,
name: "반하나",
age: 25,
gender: "여",
joinDate: ISODate("2024-02-20T00:00:00Z"),
tags: ["데이터베이스", "몽고DB"],
orders: [
{ orderId: 103, amount: 300000, orderDate: ISODate("2024-02-18T00:00:00Z") }
],
products: [
{ productId: "p3", category: "전자제품", price: 120000, rating: 4.6 }
]
},
{
_id: 3,
name: "오렌지",
age: 30,
gender: "남",
joinDate: ISODate("2024-03-05T00:00:00Z"),
tags: ["몽고DB", "집계", "데이터베이스"],
orders: [],
products: [
{ productId: "p4", category: "의류", price: 80000, rating: 4.1 }
]
}
])
db.users.aggregate([{$match: {}}])
// 30세 이상인 사람만 선택
db.users.aggregate([{$match: {age: {$gte: 30}}}])
// 이름과 나이만 보여주기
db.users.aggregate([
{$project: {name: 1, age: 1, _id: 0 }}
])
// 모든 사용자의 평균 나이 구하기
// _id: null 데이터를 한 덩어리로 묶음
db.users.aggregate([
{ $group: { _id: null, avgAge:{$avg: "$age"}}}
])
// 성별로 인원 수 세기
db.users.aggregate([
{ $group: { _id: "$gender", count: { $sum: 1 }}}
])
// 나이가 많은 순으로 상위 2명만 보기
db.users.aggregate([
{ $sort: { age: -1 }},
{ $limit: 2 }
])
// 연도별 가입자 수 구하기
db.users.aggregate([
{
$group: {
_id: { $year: "$joinDate" },
userCount: { $sum: 1 }
}
},
{ $sort: { "_id": 1 }}
])
// 태그별로 몇 번 등장했는지 세기
db.users.aggregate([
{ $unwind: "$tags" },
{ $group: { _id: "$tags", count: { $sum: 1 }}},
{ $sort: { count: -1 }}
])
// 사용자별 총 구매 금액 구하기
db.users.aggregate([
{ $unwind: "$orders"},
{
$group: {
_id: "$_id",
total: { $sum: "$orders.amount" }
}
}
])
// 카테고리별 평균/최고 가격
// $avg, $max
db.users.aggregate([
{ $unwind: "$products" },
{
$group: {
_id: "$products.category",
avgPrice: { $avg: "$products.price" },
maxPrice: { $max: "$products.price" }
}
}
])
// 평점 4.5 이상인 전자제품만 보기
db.users.aggregate([
{ $unwind: "$products" },
{ $match: { "products.category": "전자제품", "products.rating": { $gte: 4.5 } }},
{ $sort: { "products.rating": -1 }}
])
// 2024년 월별 매출 계산하기
db.users.aggregate([
{ $unwind: "$orders" },
{
$match: {
"orders.orderDate": { $gte: ISODate("2024-01-01"), $lte: ISODate("2024-12-31")}
}
},
{
$group: {
_id: { month: { $month: "$orders.orderDate"} },
totalSales: { $sum: "$orders.amount" }
}
},
{ $sort: { "_id.month": 1 }}
])
프롬프트 엔지니어링 (1) | 2024.11.28 |
---|---|
파이썬과 몽고DB 연동 (0) | 2024.11.22 |
크롤링 (3) | 2024.11.20 |
인터넷과 웹서비스 (0) | 2024.11.18 |
생성형 AI (3) | 2024.11.15 |