Docs Menu
Docs Home
/ /

MongoDB 검색 쿼리 실행

이 가이드 에서는 MongoDB Search 인덱스 를 쿼리 하고 C++ 운전자 애플리케이션에서 고급 전체 텍스트 검색 기능을 사용하는 방법을 학습 수 있습니다. $search 집계 파이프라인 단계를 사용하여 검색 인덱스 쿼리 할 수 있습니다.

$search 파이프라인 단계에 대해 자세히 알아보려면 MongoDB Server 매뉴얼의 $search 가이드를 참조하세요.

참고

Atlas 및 Community Edition 버전 요구 사항

$search 집계 파이프라인 연산자는 MongoDB v4.2 이상을 실행하는 MongoDB Atlas 클러스터 또는 MongoDB v8.2 이상을 실행하는 MongoDB Community Edition 클러스터에서 호스팅되는 컬렉션에만 사용할 수 있습니다. 컬렉션은 MongoDB 검색 인덱스에 포함되어야 합니다. 이 연산자 의 필수 설정 및 기능에 대해 자세히 학습하려면 MongoDB 검색 설명서를 참조하세요.

이 가이드 의 예제에서는 sample_mflix.movies Atlas 샘플 데이터 세트의 컬렉션 사용합니다. 무료 MongoDB Atlas cluster 생성하고 샘플 데이터 세트를 로드하는 방법을 학습 MongoDB 시작하기 가이드 참조하세요.

Atlas 컬렉션 에서 검색 수행하려면 먼저 컬렉션 에 MongoDB Search 인덱스 만들어야 합니다. MongoDB Search 인덱스 는 데이터를 검색 가능한 형식으로 분류하는 데이터 구조입니다. MongoDB Search 인덱스 만드는 방법을 학습 MongoDB Search 인덱스 가이드 를 참조하세요.

$search 집계 파이프라인 단계를 사용하려면 실행 쿼리 유형을 나타내는 MongoDB Search 쿼리 연산자 지정해야 합니다. 선택적으로 수집기를 사용하여 쿼리 출력의 값과 범위를 지정할 수 있습니다. MongoDB Search에서 사용할 수 있는 모든 연산자 및 수집기의 표를 보려면 Atlas 설명서의 연산자 및 수집기 페이지를 참조하세요.

다음 예시 compound 연산자 사용하여 여러 연산자를 단일 쿼리 로 결합합니다. 자세히 학습 Atlas 문서에서 복합 연산자 가이드 참조하세요.

쿼리에 다음 검색 기준이 있습니다.

  • genres 필드에 Comedy가 포함되어서는 안 됩니다.

  • title 필드에 문자열New York이 포함되어야 합니다.

쿼리에는 다음 단계도 포함됩니다.

  • $limit, 출력을 10개의 결과로 제한합니다.

  • title을(를) 제외한 모든 필드를 제외하고 score라는 필드를 추가하려면 $project을(를) 사용합니다.

#include <iostream>
#include <bsoncxx/json.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/exception/exception.hpp>
#include <mongocxx/instance.hpp>
#include <mongocxx/pipeline.hpp>
int main() {
const mongocxx::instance instance{};
try {
const mongocxx::client client{mongocxx::uri{"<connection-string>"}};
auto collection = client["sample_mflix"]["movies"];
mongocxx::pipeline pipeline{};
auto search_stage = bsoncxx::from_json(R"(
{
"$search": {
"index": "test_index",
"compound": {
"mustNot": [
{
"text": {
"query": [ "Comedy" ],
"path": "genres"
}
}
],
"must": [
{
"text": {
"query": [ "New York" ],
"path": "title"
}
}
]
}
}
}
)");
pipeline.append_stage(search_stage.view());
pipeline.limit(10);
pipeline.project(bsoncxx::from_json(R"(
{ "_id" : 0, "title" : 1, "score" : { "$meta" : "searchScore" } }
)"));
auto cursor = collection.aggregate(pipeline);
for (const auto& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
} catch (const mongocxx::exception& e) {
std::cerr << "MongoDB error: " << e.what() << std::endl;
return EXIT_FAILURE;
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
{ "title" : "New York, New York", "score" : 6.7870168685913085938 }
{ "title" : "New York", "score" : 6.2591872215270996094 }
{ "title" : "New York Doll", "score" : 5.3819599151611328125 }
{ "title" : "Escape from New York", "score" : 4.7203946113586425781 }
{ "title" : "Autumn in New York", "score" : 4.7203946113586425781 }
{ "title" : "Gangs of New York", "score" : 4.7203946113586425781 }
{ "title" : "Sleepless in New York", "score" : 4.7203946113586425781 }
{ "title" : "Sherlock Holmes in New York", "score" : 4.2036685943603515625 }
{ "title" : "New York: A Documentary Film", "score" : 4.2036685943603515625 }
{ "title" : "An Englishman in New York", "score" : 4.2036685943603515625 }

사용 가능한 MongoDB Search 연산자에 대해 자세히 학습하려면 MongoDB Atlas 문서에서 연산자 및 수집기 가이드를 참조하세요.

MongoDB Search에 대한 자세한 내용과 더 많은 쿼리 예제를 보려면 MongoDB Search 설명서를 참조하세요.

Atlas 에 저장된 데이터에 대해 벡터 검색을 수행하려면 MongoDB Vector Search를 사용해야 합니다. MongoDB Vector Search에 대해 자세히 학습하려면 MongoDB Vector Search 문서를 참조하세요.

돌아가기

데이터베이스 명령 실행

이 페이지의 내용