문서 조회 (Query Documents)

문서 조회 (Query Documents)

MongoDB에서 읽기(Read) 작업은 곧 데이터베이스에 쿼리를 보내는 일이에요. 이 페이지에서는 문서를 조회하는 방법을 예제 위주로 살펴볼게요.

MongoDB에서는 아래 방법으로 문서를 조회할 수 있어요.

  • 프로그래밍 언어의 드라이버(driver)를 이용하는 방법

이 페이지의 예제는 inventory 컬렉션을 사용해요. 먼저 MongoDB 인스턴스의 테스트 데이터베이스에 연결하고 inventory 컬렉션을 만들고, 다음 문서들을 넣어두면 돼요.

db.inventory.insertMany( [
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
] );

컬렉션의 모든 문서 조회하기

컬렉션의 모든 문서를 조회하려면 find 메서드의 쿼리 필터 매개변수로 빈 문서인 {}를 넘겨주면 돼요. 쿼리 필터 매개변수가 바로 선택 기준을 결정해요.

db.inventory.find( {} )

빈 쿼리 필터 {}는 다음 SQL 문에 해당해요.

SELECT * FROM inventory

일치 조건(Equality Condition) 지정하기

일치 조건을 지정할 때는 쿼리 필터 문서에서 <field>:<value> 형태의 표현식을 사용해요.

{ <field1>: <value1>, ... }

예를 들어 inventory 컬렉션에서 status"D"인 문서만 조회할까요.

db.inventory.find( { status: "D" } )

이 쿼리는 status"D"인 두 문서(paper, planner)를 돌려줘요.

이 작업은 { status: "D" }라는 쿼리 필터를 사용하며, 다음 SQL 문에 해당해요.

SELECT * FROM inventory WHERE status = "D"

쿼리 연산자(Query Operator)로 조건 지정하기

일치 조건 외에도 MongoDB는 쿼리 연산자를 다양하게 제공해요. 같은 필드에 여러 후보 값을 넣고 싶을 때 $in 연산자를 쓰면 돼요.

다음 예제는 inventory 컬렉션에서 status"A" 또는 "D" 중 하나인 문서를 모두 조회해요.

db.inventory.find( { status: { $in: [ "A", "D" ] } } )

이 작업은 { status: { $in: [ "A", "D" ] } }라는 쿼리 필터를 사용하며, 다음 SQL 문에 해당해요.

SELECT * FROM inventory WHERE status in ("A", "D")

MongoDB 쿼리 연산자의 전체 목록은 Query Predicates 문서를 참고하세요.

AND 조건 지정하기

복합 쿼리(compound query)는 컬렉션 문서의 필드 두 개 이상에 조건을 걸 수 있어요. 기본적으로 복합 쿼리의 각 절은 논리적 AND로 연결돼서, 모든 조건을 동시에 만족하는 문서만 선택해요.

다음 예제는 inventory 컬렉션에서 status"A" 이고 qty가 30보다 작은($lt) 문서를 조회해요.

db.inventory.find( { status: "A", qty: { $lt: 30 } } )

이 작업은 { status: "A", qty: { $lt: 30 } }라는 쿼리 필터를 사용하며, 다음 SQL 문에 해당해요.

SELECT * FROM inventory WHERE status = "A" AND qty < 30

다른 MongoDB 비교 연산자 목록은 비교 연산자(comparison operators) 문서를 참고하세요.

OR 조건 지정하기

$or 연산자를 사용하면 각 절을 논리적 OR로 연결하는 복합 쿼리를 만들 수 있어요. 이 쿼리는 조건 중 하나라도 만족하는 문서를 선택해요.

다음 예제는 inventory 컬렉션에서 status"A" 또는 qty가 30보다 작은($lt) 문서를 조회해요.

db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )

이 작업은 { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] }라는 쿼리 필터를 사용하며, 다음 SQL 문에 해당해요.

SELECT * FROM inventory WHERE status = "A" OR qty < 30

AND와 OR 조건 함께 지정하기

AND 조건과 OR 조건을 한 쿼리에 섞을 수도 있어요. 같은 필드($or)끼리 먼저 묶고, 그 결과를 다시 AND로 연결하는 식이에요.

다음 예제는 inventory 컬렉션에서 status"A" 이고 (qty가 30보다 작거나 또는 item이 문자 p로 시작하는) 문서를 조회해요.

db.inventory.find( {
   status: "A",
   $or: [ { qty: { $lt: 30 } }, { item: { $regex: "^p" } } ]
} )

이 작업은 다음 쿼리 필터를 사용하며, 해당하는 SQL 문은 다음과 같아요.

SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")

여기서 item이 문자로 시작하는 조건은 정규 표현식 연산자 $regex로 처리했어요. MongoDB는 문자열 패턴 매칭을 위해 $regex 정규 표현식 쿼리를 지원해요.