GROUP BY와 유사한 집계 기능 CREATE TABLE customer (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT
);
// 컬렉션 이름: users
db.users.insertMany([
// 첫 번째 문서
{
"_id": 1,
"name": "홍길동",
"age": 25
}
// 두 번째 문서 (age 대신 email, extra 필드 추가)
{
"_id": 2,
"name": "김기훈",
"email": "test@example.com",
"hobby": ["game", "music"]
}
])

// users 컬렉션에 도큐먼트 하나 추가
db.users.insertOne({
"_id": 1,
"name": "홍길동",
"age": 25
});
db.users.insertOne({insertOne이나 insertMany를 실행하면 자동 생성db.createCollection("users")use [데이터베이스 이름]dbshow dbsdb.dropDatabase()db.stats() db.createCollection("users", { capped: false })
users라는 이름의 새로운 컬렉션을 생성 db.createCollection("log", { capped: true, size: 100000 })
log 라는 이름의 컬렉션을 생성하고, 이를 capped 컬렉션으로 지정size 는 컬렉션의 최대 크기를 바이트 단위로 설정users 컬렉션의 이름을 customers로 변경합니다.customers라는 이름의 컬렉션을 삭제합니다.
db.createCollection("users", { capped: false })
// 단일 문서 삽입
db.users.insertOne({ name: "Alice", age: 30, address: "123 Maple St" })
// 여러 문서 삽입
db.users.insertMany([
{ name: "Bob", age: 25, address: "456 Oak St" },
{ name: "Charlie", age: 35, address: "789 Pine St" }
])
insertOne : name,age,address 가 한개의 document key:values값으로 넣는다.// 모든 문서 조회
db.users.find() = SELECT * FROM users;
// 특정 필드 조회
db.users.find({}, { name: 1, address: 1 }) = SELECT name, address FROM users;
// 조건에 맞는 문서 조회
db.users.find({ address: "서울" }) = SELECT * FROM users WHERE address = '서울';
// 특정 문서 업데이트
db.users.updateOne({ name: "Alice" }, { $set: { age: 31 } })
// 여러 문서 업데이트
db.users.updateMany({ address: "서울" }, { $set: { address: "부산" } })
// 특정 문서 삭제
db.users.deleteOne({ name: "Alice" })
// 조건에 맞는 여러 문서 삭제
db.users.deleteMany({ address: "부산" })

db.myCollection.find({ age: { $in: [30, 35, 40] } })
SELECT * FROM myCollection WHERE age IN (30, 35, 40);과 동일db.myCollection.find({ age: { $nin: [30, 35, 40] } })

db.myCollection.find({ $and: [{ age: { $gt: 20 } }, { age: { $lt: 30 } }] })
db.myCollection.find({ $nor: [{ age: 20 }, { name: "Alice" }] })
db.collection.aggregate([
{ 단계1 },
{ 단계2 },
{ 단계3 },
...
])
{ $match: { age: { $gte: 20 } } }
age ≥ 20인 도큐먼트만 필터링
{
$group: {
_id: "$city", // 그룹 기준
count: { $sum: 1 }, // 개수 세기
avgAge: { $avg: "$age" } // 평균
}
}
해석 : city별로 그룹을 묶고, count와 평균 나이 계산
{ $sort: { avgAge: -1 } }
해석 : 평균 나이를 기준으로 내림차순 정렬
{ $project: { name: 1, age: 1, _id: 0 } }
해석 : name과 age만 출력, _id는 제외
{ $limit: 5 }
{ $skip: 10 }
해석1 : 결과 도큐먼트를 앞에서 5개까지만 보여줍니다.
해석2 : 결과 도큐먼트를 앞에서 10개 건너뛰고 그다음부터 보여줍니다.
{
$lookup: {
from: "orders", // 다른 컬렉션
localField: "customer_id",
foreignField: "customer_id",
as: "orders"
}
}
해석 : users와 orders 조인하기
# 데이터
db.users.insertMany([
{ name: "홍길동", age: 25, city: "Seoul" },
{ name: "김철수", age: 30, city: "Busan" },
{ name: "이영희", age: 22, city: "Seoul" },
{ name: "박민수", age: 35, city: "Busan" },
{ name: "최지현", age: 28, city: "Seoul" }
])
# Aggregation 쿼리
db.users.aggregate([
{ $match: { age: { $gte: 25 } } }, // 25세 이상만
{ $group: { _id: "$city", avgAge: { $avg: "$age" }, total: { $sum: 1 } } },
{ $sort: { avgAge: -1 } } // 평균 나이 내림차순
])
# 결과
[
{ _id: "Busan", avgAge: 32.5, total: 2 },
{ _id: "Seoul", avgAge: 26.5, total: 2 }
]


