Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
PyMongo 드라이버
/ /

쿼리 지정

이 가이드에서는 PyMongo를 사용하여 쿼리를 지정하는 방법을 배울 수 있습니다.

쿼리 필터 를 만들어 쿼리가 반환하는 문서 세트를 구체화할 수 있습니다. 쿼리 필터는 MongoDB 가 읽기 또는 쓰기 작업에서 문서를 일치시키는 데 사용하는 Atlas Search 기준을 지정하는 표현식입니다. 쿼리 필터에서는 드라이버가 쿼리와 정확히 일치하는 문서를 Atlas Search에 표시하도록 요청하거나 쿼리 필터를 Express 하여 보다 복잡한 일치 기준을 표현할 수 있습니다.

이 가이드의 예제에서는 다음 문서가 포함된 fruits 컬렉션에서 작업을 실행합니다.

{ "_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"] },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"] },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2, "type": ["naval", "mandarin"] },
{ "_id": 4, "name": "pineapple", "qty": 3, "rating": 5, "color": "yellow" },

다음 코드 예시 데이터베이스 와 컬렉션 만든 다음 컬렉션 에 샘플 문서를 삽입하는 방법을 보여 줍니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

from pymongo import MongoClient
uri = "<connection string URI>"
client = MongoClient(uri)
try:
database = client["sample_fruit"]
collection = database["fruits"]
collection.insert_many([
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"] },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"] },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2, "type": ["naval", "mandarin"] },
{ "_id": 4, "name": "pineapple", "qty": 3, "rating": 5, "color": "yellow" },
])
client.close()
except Exception as e:
raise Exception("Error inserting documents: ", e)
from pymongo import AsyncMongoClient
uri = "<connection string URI>"
client = AsyncMongoClient(uri)
try:
database = client["sample_fruit"]
collection = database["fruits"]
await collection.insert_many([
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"] },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"] },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2, "type": ["naval", "mandarin"] },
{ "_id": 4, "name": "pineapple", "qty": 3, "rating": 5, "color": "yellow" },
])
await client.close()
except Exception as e:
raise Exception("Error inserting documents: ", e)

리터럴 값 쿼리는 쿼리 필터와 정확히 일치하는 문서를 반환합니다.

다음 예에서는 쿼리 필터를 find() 메서드에 대한 매개 변수로 지정합니다. 이 코드는 color 필드 값이 "yellow" 인 모든 문서를 반환합니다.

results = collection.find({ "color": "yellow" })
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

모든 문서 찾기

컬렉션의 모든 문서를 찾으려면 find() 메서드를 호출하고 빈 쿼리 필터를 전달합니다. 다음 예에서는 컬렉션의 모든 문서를 찾습니다.

results = collection.find({})

비교 연산자는 쿼리 필터의 지정된 값을 기준으로 문서 필드 값을 평가합니다. 다음은 일반적인 비교 연산자 목록입니다.

  • $gt: 보다 큼

  • $lte: 보다 작거나 같음

  • $ne: 같지 않음

비교 연산자의 전체 목록을 보려면 MongoDB Server 매뉴얼의 비교 쿼리 연산자 가이드를 참조하세요.

다음 예제에서는 쿼리 필터의 비교 연산자를 find() 메서드에 대한 매개 변수로 지정합니다. 이 코드는 rating 필드 값이 2 보다 큰 모든 문서를 반환합니다.

results = collection.find({ "rating": { "$gt" : 2 }})
for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}
results = collection.find({ "rating": { "$gt" : 2 }})
async for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

논리 연산자는 두 개 이상의 표현식 집합의 결과에 적용된 논리를 사용하여 문서를 일치시킵니다. 다음은 논리 연산자 목록입니다.

  • $and모든 절의 조건과 일치하는 모든 문서를 반환합니다.

  • $or 절의 조건과 일치하는 모든 문서를 반환합니다.

  • $nor, 어떤 절의 조건과도 일치 하지 않는 모든 문서를 반환합니다.

  • $not표현식과 일치 하지 않는 모든 문서를 반환합니다.

논리 연산자에 대해 자세히 알아보려면 MongoDB Server 매뉴얼의 논리 쿼리 연산자 가이드를 참조하세요.

다음 예시 쿼리 필터하다 의 논리 연산자 find() 메서드에 대한 매개 변수로 지정합니다. 이 코드는 qty 필드 값이 5 보다 크거나 color 필드 값이 "yellow"인 모든 문서를 반환합니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

results = collection.find({
"$or": [
{ "qty": { "$gt": 5 }},
{ "color": "yellow" }
]
})
for f in results:
print(f)
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 3, 'name': 'oranges', 'qty': 6, 'rating': 2, 'type': ['naval', 'mandarin']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}
results = collection.find({
"$or": [
{ "qty": { "$gt": 5 }},
{ "color": "yellow" }
]
})
async for f in results:
print(f)
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 3, 'name': 'oranges', 'qty': 6, 'rating': 2, 'type': ['naval', 'mandarin']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

배열 연산자는 배열 필드에 있는 요소의 값 또는 수량을 기준으로 문서를 일치시킵니다. 다음은 사용 가능한 배열 연산자 목록입니다.

  • $all쿼리의 모든 요소를 포함하는 배열이 있는 문서를 반환합니다.

  • $elemMatch배열 필드의 요소가 쿼리의 모든 조건과 일치하는 경우 문서를 반환합니다.

  • $size지정된 크기의 배열이 있는 모든 문서를 반환합니다.

배열 연산자에 대해 자세히 알아보려면 매뉴얼의 배열 쿼리 연산자 가이드를 MongoDB Server 참조하세요.

다음 예시 에서는 쿼리 필터하다 의 배열 연산자 find() 메서드에 대한 매개 변수로 지정합니다. 이 코드는 2 요소를 포함하는 type 배열 필드 있는 모든 문서를 반환합니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

results = collection.find({
"type" : { "$size": 2 }
})
for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 3, 'name': 'oranges', 'qty': 6, 'rating': 2, 'type': ['naval', 'mandarin']}
results = collection.find({
"type" : { "$size": 2 }
})
async for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 3, 'name': 'oranges', 'qty': 6, 'rating': 2, 'type': ['naval', 'mandarin']}

요소 연산자는 필드의 존재 여부 또는 유형에 따라 데이터를 쿼리합니다.

요소 연산자에 대해 자세히 알아보려면 매뉴얼의 요소 쿼리 연산자 가이드를 MongoDB Server 참조하세요.

다음 예시 에서는 쿼리 필터하다 의 요소 연산자 find() 메서드에 대한 매개 변수로 지정합니다. 이 코드는 color 필드 있는 모든 문서를 반환합니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

results = collection.find( { "color" : { "$exists": "true" }} )
for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}
results = collection.find( { "color" : { "$exists": "true" }} )
async for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 2, 'name': 'bananas', 'qty': 7, 'rating': 4, 'color': 'yellow', 'type': ['cavendish']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

평가 연산자는 개별 필드 또는 전체 컬렉션 문서의 평가를 기반으로 데이터를 반환합니다.

다음은 일반적인 평가 연산자 목록입니다.

  • $text문서에 대해 텍스트 Atlas Search를 수행합니다.

  • $regex지정된 정규 표현식과 일치하는 문서를 반환합니다.

  • $mod필드 값에 모듈로 연산을 수행하고 나머지가 지정된 값인 문서를 반환합니다.

평가 연산자의 전체 목록을 보려면 MongoDB Server 매뉴얼의 평가 쿼리 연산자 가이드를 참조하세요.

다음 예시 에서는 쿼리 필터하다 의 평가 연산자 find() 메서드에 대한 매개 변수로 지정합니다. 이 코드는 정규 표현식 사용하여 "p" 문자가 두 개 이상 연속된 name 필드 값이 있는 모든 문서를 반환합니다. Synchronous 또는 Asynchronous 탭 선택하여 해당 코드를 확인합니다.

results = collection.find({ "name" : { "$regex" : "p{2,}" }} )
for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}
results = collection.find({ "name" : { "$regex" : "p{2,}" }} )
async for f in results:
print(f)
{'_id': 1, 'name': 'apples', 'qty': 5, 'rating': 3, 'color': 'red', 'type': ['fuji', 'honeycrisp']}
{'_id': 4, 'name': 'pineapple', 'qty': 3, 'rating': 5, 'color': 'yellow'}

웹 애플리케이션에서는 다음 코드 예제와 같이 URL에 문서의 ObjectId를 인코딩하는 것이 일반적입니다.

"/posts/50b3bda58a02fb9a84d8991e"

웹 프레임워크는 ObjectId 의 부분을 URL 요청 핸들러에 로 string 전달합니다. 문자열을 find_one() 메서드에 전달하기 전에 string 을 ObjectId 인스턴스로 변환해야 합니다.

다음 코드 예시는 Flask 에서 이 변환을 수행하는 방법을 보여줍니다. 애플리케이션. 이 프로세스는 다른 웹 프레임워크도 비슷합니다.

from pymongo import MongoClient
from bson.objectid import ObjectId
from flask import Flask, render_template
client = MongoClient()
app = Flask(__name__)
@app.route("/posts/<_id>")
def show_post(_id):
# NOTE!: converting _id from string to ObjectId before passing to find_one
post = client.db.posts.find_one({'_id': ObjectId(_id)})
return render_template('post.html', post=post)
if __name__ == "__main__":
app.run()

문서 쿼리에 대해 자세히 알아보려면 MongoDB Server 매뉴얼의 문서 쿼리 가이드를 참조하세요.

PyMongo 로 문서를 검색하는 방법에 대해 자세히 학습 문서 찾기를 참조하세요.

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

돌아가기

문서 쿼리

이 페이지의 내용