티스토리 뷰

개인 공부를 위하여 몽고디비 공식문서를 한글로 번역한 글입니다.

이 페이지는 몽고 셸에서 db.collection.find() 메서드를 사용한 쿼리 연산의 예시들을 제공한다. 이 페이지의 예시들은 inventory 컬렉션을 사용한다. 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" }
]);

실행 결과:

{
	"acknowledged": true,
	"insertedIds": [
		ObjectId("5d7b9cb2292377f2eb20fbcb"),
		ObjectId("5d7b9cb2292377f2eb20fbcc"),
		ObjectId("5d7b9cb2292377f2eb20fbcd"),
		ObjectId("5d7b9cb2292377f2eb20fbce"),
		ObjectId("5d7b9cb2292377f2eb20fbcf")
	]
}

> 컬렉션의 모든 도큐먼트 셀렉트

컬렉션의 모든 도큐먼트들을 셀렉트하기 위해서, find 메서드에 쿼리 필터 파라미터로 비어있는 도큐먼트를 전달하라. 쿼리 필터 파라미터는 셀렉트 기준을 결정한다.

db.inventory.find( {} )

연산은 다음 SQL문과 일치한다.

SELECT * FROM inventory

> 동등 조건 지정

동등 조건을 지정하기 위해서, 쿼리 필터 도큐먼트에 <field>:<value> 표현을 사용하라.

{ <field>: <value>, ... }

다음 예시는 inventory 컬렉션에서 status가 "D"인 모든 도큐먼트들을 셀렉트한다.

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

연산은 다음 SQL문과 일치한다.

SELECT * FROM inventory WHERE status = "D"

> 쿼리 연산자를 이용하여 조건 지정

쿼리 필터 도큐먼트는 조건을 지정하기 위하여 다음 형식에서 쿼리 연산자(operator)를 이용할 수 있다.

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

다음 예시는 inventory 컬렉션에서 status가 "A" 또는 "D"인 모든 도큐먼트들을 검색한다.

db.inventory.find( { status: { $in: ["A", "D"] } } )
$or 연산자를 사용하여 이 쿼리를 표현할 수 있지만 동일한 필드에 동등 검사를 수행할 때는 $or 연산자 대신 $in 연산자를 사용하라.

이 연산은 다음 SQL문과 일치한다.

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

> MongoDB 쿼리 연산자 리스트

  • 비교
이름 설명
$eq 지정된 값과 같은 값을 찾는다.
$gt 지정된 값보다 큰 값을 찾는다.
$gte 지정된 값보다 크거나 같은 값을 찾는다.
$in 배열에 지정된 값들 중 일부라도 일치하는 경우를 찾는다.
$lt 지정된 값보다 작은 값을 찾는다.
$lte 지정된 값보다 작거나 같은 값을 찾는다.
$ne 지정된 값과 같지 않은 값을 찾는다.
$nin 배열에 지정된 값들 중 모두 일치하지 않는 경우를 찾는다.

 

  • 논리
이름 설명
$and 두 절의 조건에 부합하는 모든 도큐먼트들을 반환하는 논리 AND와 함께 쿼리 절을 조인한다.
$not 쿼리 표현식의 효과를 반전시키고 쿼리 표현식과 일치하지 않는 문서를 반환한다.
$nor 두 절에 모두 일치하지 않는 모든 도큐먼트를 반환하는 논리 NOR와 함께 쿼리 절을 조인한다.
$or 두 절에의 조건 중 하나 이상에 부합하는 모든 도큐먼트를 반환하는 논리 OR와 함께 쿼리 절을 조인한다.

 

  • 요소
이름 설명
$exists 지정된 필드를 갖는 도큐먼트를 찾는다.
$type 지정된 타입의 필드인 도큐먼트를 찾는다.

 

  • 평가
이름 설명
$expr 쿼리 언어 내에서 aggregation 표현을 사용할 수 있다.
$jsonSchema 주어진 JSON Schema에 대해 도큐먼트를 검증한다.
$mod 필드 값에 대해 나머지 연산을 수행하고, 지정된 결과가 있는 도큐먼트를 셀렉트한다.
$regex 지정된 정규식과 일치하는 도큐먼트를 셀렉트한다.
$text 텍스트 색인으로 색인된 필드의 내용에 대한 텍스트를 검색한다.
$where JavaScript 표현을 만족시키는 도큐먼트를 검색한다.

 

  • 배열
이름 설명
$all 쿼리에 지정된 모든 요소를 포함하는 배열을 검색한다.
$elemMatch 지정된 $elemMatch의 모든 조건에 일치하는 배열 필드의 요소가 존재하는 도큐먼트를 셀렉트한다.
$size 배열 필드가 지정된 사이즈인 도큐먼트를 셀렉트한다.

> AND 조건 지정

복합 쿼리는 컬렉션의 도큐먼트들에 둘 이상의 필드를 위한 조건을 지정할 수 있다. 암시적으로, 논리 AND 접속자는 모든 조건과 일치하는 컬렉션의 도큐먼트를 셀렉트하도록 복합 쿼리의 절들을 연결한다.

다음 예시는 inventory 컬렉션의 status가 "A"이고 qty가 30보다 작은 모든 도큐먼트들을 검색한다.

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

이 연산은 다음 SQL문과 일치한다.

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

> OR 조건 지정

$or 연산자를 사용하여, 각 절에 논리 OR 접속자를 결합하는 복합 쿼리를 지정하여 적어도 하나의 조건과 일치하는 컬렉션의 도큐먼트를 셀렉트할 수 있다.

다음 예시는 컬렉션의 status가 "A" 또는 qty가 30보다 작은 모든 도큐먼트들을 검색한다.

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

이 연산은 다음 SQL문과 일치한다.

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

> AND와 OR 조건 함께 지정

다음 예시에서는, 컬렉션의 status가 "A"이고 qty가 30보다 작거나 item이 문자 p로 시작하는 도큐먼트를 셀렉트한다.

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

이 연산은 다음 SQL문과 일치한다.

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

> 쿼리 동작

  • Cursor
    • db.collection.find() 메서드는 일치하는 도큐먼트로의 cursor를 반환한다.
  • 읽기 분리
    • 복제본 세트와 복제본 세트 샤드 읽기의 경우, 읽기 문제는 클라이언트가 읽기의 분리 수준을 선택할 수 있도록 한다.
728x90
댓글