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クラスターを無料で作成して、サンプルデータセットをロードする方法については、 MongoDBを使い始めるガイドを参照してください

Atlasコレクションで検索を実行する前に、まずコレクションにMongoDB Searchインデックスを作成する必要があります。 MongoDB Searchインデックスは、 検索可能な形式でデータを分類するデータ構造です。 MongoDB Searchインデックス の作成方法については、「 MongoDB Search インデックスガイド 」を参照してください。

$search集計パイプライン ステージを使用するには、実行するクエリのタイプを示すMongoDB 検索するクエリ演算子を指定する必要があります。オプションで、コレクターを使用して、クエリ出力の値と範囲を指定できます。MongoDB 検索するで利用可能なすべての演算子とコレクターのテーブルを表示するには、Atlas ドキュメントの「演算子とコレクター」ページを参照してください。

次の例では、compound 演算子を使用して複数の演算子を 1 つのクエリにまとめています。詳細については、Atlas ドキュメントの「 複合演算子 」ガイドを参照してください。

クエリには次の検索条件があります。

  • genres フィールドに Comedy を含めることはできません。

  • title フィールドには string New York が含まれている必要があります。

クエリには、次のステージが含まれます。

  • $limitを使用して、出力結果を 10 に制限します。

  • $project を使用して、title 以外のすべてのフィールドを除外し、score という名前のフィールドを追加します。

#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 検索するの詳細と、その他のクエリの例については、MongoDB 検索するドキュメントを参照してください。

Atlas に保存されているデータに対してベクトル検索を実行する場合は、 MongoDB ベクトル検索 を使用する必要があります。MongoDB ベクトル検索の詳細については、MongoDB ベクトル検索のドキュメントを参照してください。

戻る

データベースコマンドの実行

項目一覧