티스토리 뷰
개인 공부를 위하여 몽고디비 공식문서를 한글로 번역한 글입니다.
이 페이지는 몽고 셸에서 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를 반환한다.
- 읽기 분리
- 복제본 세트와 복제본 세트 샤드 읽기의 경우, 읽기 문제는 클라이언트가 읽기의 분리 수준을 선택할 수 있도록 한다.
'dev > mongodb' 카테고리의 다른 글
[번역] MongoDB Aggregation / 어그리게이션, 집합, 집계 (0) | 2019.10.03 |
---|---|
[번역] MongoDB Delete Documents / 도큐먼트 삭제 (0) | 2019.09.14 |
[번역] MongoDB Update Documents / 도큐먼트 업데이트 (0) | 2019.09.14 |
MongoDB / NoSQL 이란? (0) | 2019.09.12 |
[번역] MongoDB Insert Documents / 도큐먼트 삽입 (0) | 2019.09.11 |