日付フィールドおよび数値フィールドに対して Atlas Search string クエリを実行する方法
このチュートリアルでは、 sample_airbnb.listingsAndReviews
コレクション内の string
、 date
、およびnumber
フィールドに対して Atlas Search クエリを実行する方法について説明します。 数値フィールド値と日付フィールド値を string として保存するマテリアライズドビューを作成します。 Atlas Search次に、マテリアライズドビューに インデックスを作成し、string queryString と オートコンプリート 演算子を使用してこれらの フィールドに対してクエリを実行します。このチュートリアルでは、次の手順について説明します。
sample_airbnb.listingsAndReviews
コレクションのname
、property_type
、last_scraped
、およびaccomodates
フィールドにマテリアライズドビューを作成します。マテリアライズドビューで動的および静的な Atlas Search インデックスを設定します。
queryString演算子とオートコンプリート演算子を使用して、マテリアライズドビューのフィールドに対して Atlas Search クエリを実行し、プロパティを検索します。
開始する前に、Atlas クラスターが前提条件 に記載されている要件を満たしていることを確認してください。
Atlas Search インデックスを作成するには、プロジェクトに対するProject Data Access Admin
以上のアクセス権が必要です。
コレクションでのマテリアライズドビューの作成
このセクションでは、 airbnb_listingsAndReviews
コレクションのname
、 property_type
、 last_scraped
、 accomodates
、およびmaximum_nights
フィールドに対してairbnb-mat-view
という名前のマテリアライズドビューを作成します。 マテリアライズドビューを使用すると、ソースコレクション内の数値フィールドと日付フィールドを取得し、マテリアライズドビューにstringフィールドとして保存できます。
Atlasmongosh
にログインし、 を使用してクラスターに接続します。
ターミナル ウィンドウでmongosh
を開き、クラスターに接続します。 接続の詳細な手順については、「 mongosh
経由での接続 」を参照してください。
確認して sample_airbnb
データベースに切り替えます。
次のコマンドを実行して、データベースがクラスターに存在することを確認します。
show dbs sample_airbnb 55.3 MB sample_analytics 9.59 MB sample_geospatial 1.43 MB sample_guides 41 kB sample_mflix 51.1 MB sample_restaurants 6.95 MB sample_supplies 1.21 MB sample_training 55.5 MB sample_weatherdata 2.89 MB admin 348 kB local 2.1 GB 次のコマンドを実行して、
sample_airbnb
データベースに切り替えます。use sample_airbnb switched to db sample_airbnb
airbnb_mat_view
という名前のマテリアライズドビューを作成します。
マテリアライズドビューを作成するには、以下のクエリを実行します。 クエリでは、次の集計パイプライン ステージを指定します。
$project
: このステージでは、クエリは次の処理を実行します。$merge
: このステージでは、クエリは$project
ステージの出力フィールドをairbnb_mat_view
という名前のマテリアライズドビューに書き込みます。db.listingsAndReviews.aggregate( [ { $project: { lastScrapedDate: { $dateToString: { format: "%Y-%m-%d", date: "$last_scraped" } }, propertyName: "$name", propertyType: "$property_type", accommodatesNumber: { $toString: "$accommodates" }, maximumNumberOfNights: { $toString: "$maximum_nights" } } }, { $merge: { into: "airbnb_mat_view", whenMatched: "replace" } } ] )
マテリアライズドビューのフィールドに Atlas Search インデックスを作成する
このセクションでは、 lastScrapedDate
、 name
、 propertyType
、 accommodatesNumber
、 maximumNumberOfNights
フィールドに Atlas Search インデックスを作成し、これらのフィールドに対してクエリを実行します。
Atlas Atlasで、プロジェクトの {0 ページにGoします。GoClusters
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。
[ Clusters (クラスター) ] ページが表示されます。
Index Name を入力し、Database and Collection を設定します。
Index Nameフィールドに
date-number-fields-tutorial
と入力します。インデックスに
default
と名付けると、 $searchパイプライン ステージでindex
パラメータを指定する必要がなくなります。 インデックスにカスタム名を付ける場合は、index
パラメータでこの名前を指定する必要があります。Database and Collectionセクションで、
sample_airbnb
データベースを検索し、airbnb_mat_view
コレクションを選択します。
マテリアライズドビューのフィールドにインデックスを定義します。
次のいずれかのインデックスを作成できます。
queryString演算子を使用してクエリを実行するための 動的マッピング を使用するインデックス。 インデックス定義で 動的マッピング のみを使用する場合は、オートコンプリート演算子を使用してクエリを実行することはできません。
オートコンプリート演算子を使用して実行中のクエリに静的マッピングを使用するインデックス。 タイプ
autocomplete
としてインデックス付けされたフィールドに対してqueryString演算子を使用するクエリは実行できません。
Atlas userインターフェースで Visual Editor または JSON Editor を使用してインデックスを作成できます。
[Next] をクリックします。
[Create Search Index] をクリックします。
インデックスの定義を確認します。
インデックス定義は、次のようになります。
{ "mappings": { "dynamic": true } } [Next] をクリックします。
[Create Search Index] をクリックします。
Atlas userインターフェースで Visual Editor または JSON Editor を使用してインデックスを作成できます。
クリック Next
[Refine Your Index] をクリックします。
Field Mappings セクションで [Add Field] をクリックします。
Add Field MappingウィンドウでCustomized Configurationをクリックします。
Field NameドロップダウンからaccommodatesNumberを選択します。
[ Data Typeドロップダウンをクリックし、ドロップダウンから [ Autocomplete ] を選択して、次のフィールドを設定します。
UI フィールド名構成Max Grams
<maximum number of characters to index per sequence, numeric value>
Min Grams
<minimum number of characters to index per sequence, numeric value.
Tokenization
edgeGram
Fold Diacritics
true
Min Grams
の値が非常に低い場合、インデックスが非常に大きくなる可能性があります。[ Addをクリックして、 Field Mappingsテーブルにフィールドを追加します。
Field MappingsセクションでAdd Fieldをクリックし、ステップdからステップfを繰り返して、次のフィールドの設定を構成します。
lastScrapedDate
numberOfNights
[Save Changes] をクリックします。
デフォルトのインデックス定義を、以下の例のインデックス定義に置き換えます。
{ "mappings": { "dynamic": false, "fields": { "accommodatesNumber": [ { "dynamic": true, "type": "document" }, { "minGrams": 1, "type": "autocomplete" } ], "lastScrapedDate": [ { "dynamic": true, "type": "document" }, { "type": "autocomplete" } ], "maximumNumberOfNights": [ { "dynamic": true, "type": "document" }, { "minGrams": 1, "type": "autocomplete" } ] } } } [Next] をクリックします。
変換されたフィールドでのテキスト検索の実行
string に変換された数値フィールドと日付フィールドに対してクエリを実行できます。 このチュートリアルでは、 queryStringとオートコンプリート演算子を使用してプロパティを検索します。 クエリは、次のパイプライン ステージを使用します。
このセクションでは、Atlas クラスターに接続し、 airbnb_mat_view
コレクションのフィールドに対して 演算子を使用してサンプル クエリを実行します。
➤ このページの [言語の選択] ドロップダウンメニューを使用して、このセクションの例の言語を設定します。
mongosh
を使用してクラスターに接続します。
ターミナル ウィンドウでmongosh
を開き、クラスターに接続します。 接続の詳細な手順については、「 mongosh
経由での接続 」を参照してください。
sample_airbnb
データベースを使用します。
mongosh
プロンプトで次のコマンドを実行します。
use sample_airbnb
switched to db sample_airbnb
インデックスを作成したオペレーターを使用して、次のAtlas Search クエリを実行します。
動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_view
コレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_view
コレクションをクエリできます。
次のクエリは、プロパティ タイプがApartment
またはCondominium
で、 2
人に受け入れられ、 2019
にリストされているプロパティを検索します。
db.airbnb_mat_view.aggregate([ { "$search": { "index": "date-number-fields-tutorial", "queryString": { "defaultPath": "propertyType", "query": "propertyType: (Apartment OR Condominium) AND accommodatesNumber: 4 AND lastScrapedDate: 2019" } } }, { $limit: 5 }, { $project: { "_id": 0 } } ])
1 [ 2 { 3 lastScrapedDate: '2019-03-06', 4 propertyName: 'LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!', 5 propertyType: 'Condominium', 6 accommodatesNumber: '4' 7 }, 8 { 9 lastScrapedDate: '2019-03-06', 10 propertyName: 'Makaha Valley Paradise with OceanView', 11 propertyType: 'Condominium', 12 accommodatesNumber: '4' 13 }, 14 { 15 lastScrapedDate: '2019-03-06', 16 propertyName: 'March 2019 availability! Oceanview on Sugar Beach!', 17 propertyType: 'Condominium', 18 accommodatesNumber: '4' 19 }, 20 { 21 lastScrapedDate: '2019-03-06', 22 propertyName: 'Tropical Jungle Oasis', 23 propertyType: 'Condominium', 24 accommodatesNumber: '4' 25 }, 26 { 27 lastScrapedDate: '2019-02-11', 28 propertyName: 'Hospede-se com acesso fácil.', 29 propertyType: 'Condominium', 30 accommodatesNumber: '4' 31 } 32 ] 33
次のクエリでは、プロパティ タイプがHouse
、 2
人に対応している、 2019
にリストされている、または最大30
配列のプロパティを検索します。
db.airbnb_mat_view.aggregate([ { "$search": { "index": "date-number-fields-tutorial", "queryString": { "defaultPath": "propertyType", "query": "propertyType: House OR accommodatesNumber: 2 OR lastScrapedDate: 2019 OR maximumNumberOfNights: 30" } } }, { $limit: 5 }, { $project: { "_id": 0 } } ])
1 [ 2 { 3 lastScrapedDate: '2019-02-11', 4 propertyName: '2017 , férias no Rio', 5 propertyType: 'House', 6 accommodatesNumber: '2', 7 maximumNumberOfNights: '30' 8 }, 9 { 10 lastScrapedDate: '2019-03-07', 11 propertyName: 'Newly renovated home', 12 propertyType: 'House', 13 accommodatesNumber: '2', 14 maximumNumberOfNights: '30' 15 }, 16 { 17 lastScrapedDate: '2019-02-18', 18 propertyName: 'Vintage House For Rent', 19 propertyType: 'House', 20 accommodatesNumber: '2', 21 maximumNumberOfNights: '30' 22 }, 23 { 24 lastScrapedDate: '2019-02-18', 25 propertyName: '4floor house in Taksim,Taksimde 4katli müstakil ev', 26 propertyType: 'House', 27 accommodatesNumber: '2', 28 maximumNumberOfNights: '30' 29 }, 30 { 31 lastScrapedDate: '2019-02-16', 32 propertyName: '22 Oporto Guesthouse Cordoaria', 33 propertyType: 'House', 34 accommodatesNumber: '2', 35 maximumNumberOfNights: '30' 36 } 37
次のクエリは、 2
から一時的にリストされたプロパティを検索し、 1
から開始される日数の継続を許可します。
db.airbnb_mat_view.aggregate([ { "$search": { "index": "date-number-fields-tutorial", "compound": { "should": [{ "autocomplete": { "path": "lastScrapedDate", "query": "2" } }, { "autocomplete": { "path": "maximumNumberOfNights", "query": "1" } }] } } }, { $limit: 5 }, { $project: { "_id": 0 } } ])
[ { lastScrapedDate: '2019-02-11', propertyName: 'Horto flat with small garden', propertyType: 'Apartment', accommodatesNumber: '4', maximumNumberOfNights: '1125' }, { lastScrapedDate: '2019-03-06', propertyName: 'Private Room in Bushwick', propertyType: 'Apartment', accommodatesNumber: '1', maximumNumberOfNights: '1125' }, { lastScrapedDate: '2019-02-11', propertyName: 'Apt Linda Vista Lagoa - Rio', propertyType: 'Apartment', accommodatesNumber: '2', maximumNumberOfNights: '1125' }, { lastScrapedDate: '2019-02-18', propertyName: 'Charming Flat in Downtown Moda', propertyType: 'House', accommodatesNumber: '6', maximumNumberOfNights: '1125' }, { lastScrapedDate: '2019-02-11', propertyName: "Catete's Colonial Big Hause Room B", propertyType: 'House', accommodatesNumber: '8', maximumNumberOfNights: '1125' } ]
次のクエリでは、 3
から始まる接続数と2
以降の人数を受け入れられるプロパティを検索します。
db.airbnb_mat_view.aggregate([ { "$search": { "index": "date-number-fields-tutorial", "compound": { "should": [{ "autocomplete": { "path": "maximumNumberOfNights", "query": "3" } }, { "autocomplete": { "path": "accommodatesNumber", "query": "2" } }] } } }, { $limit: 5 }, { $project: { "_id": 0 } } ])
[ { lastScrapedDate: '2019-03-06', propertyName: 'Ocean View Waikiki Marina w/prkg', propertyType: 'Condominium', accommodatesNumber: '2', maximumNumberOfNights: '365' }, { lastScrapedDate: '2019-03-07', propertyName: 'New York City - Upper West Side Apt', propertyType: 'Apartment', accommodatesNumber: '2', maximumNumberOfNights: '360' }, { lastScrapedDate: '2019-03-07', propertyName: 'Sydney Hyde Park City Apartment (checkin from 6am)', propertyType: 'Apartment', accommodatesNumber: '2', maximumNumberOfNights: '30' }, { lastScrapedDate: '2019-03-07', propertyName: 'Private Room (2) in Guest House at Coogee Beach', propertyType: 'House', accommodatesNumber: '2', maximumNumberOfNights: '365' }, { lastScrapedDate: '2019-03-06', propertyName: '~Ao Lele~ Flying Cloud', propertyType: 'Treehouse', accommodatesNumber: '2', maximumNumberOfNights: '30' } ]
MongoDB Compass のクラスターに接続します。
MongoDB Compass を開き、クラスターに接続します。 接続の詳細な手順については、「 Compass 経由での接続 」を参照してください。
インデックスを作成したオペレーターを使用して、次のAtlas 検索クエリを実行します。
動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_view
コレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_view
コレクションをクエリできます。
次のクエリは、プロパティ タイプがApartment
またはCondominium
で、 2
人に受け入れられ、 2019
にリストされているプロパティを検索します。
パイプラインステージ | クエリ | |||||||
---|---|---|---|---|---|---|---|---|
|
| |||||||
|
| |||||||
|
|
Auto Previewを有効にした場合、MongoDB Compass は次のドキュメントを$project
パイプライン ステージの横に表示します。
1 [ 2 { 3 lastScrapedDate: '2019-03-06', 4 propertyName: 'LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!', 5 propertyType: 'Condominium', 6 accommodatesNumber: '4' 7 }, 8 { 9 lastScrapedDate: '2019-03-06', 10 propertyName: 'Makaha Valley Paradise with OceanView', 11 propertyType: 'Condominium', 12 accommodatesNumber: '4' 13 }, 14 { 15 lastScrapedDate: '2019-03-06', 16 propertyName: 'March 2019 availability! Oceanview on Sugar Beach!', 17 propertyType: 'Condominium', 18 accommodatesNumber: '4' 19 }, 20 { 21 lastScrapedDate: '2019-03-06', 22 propertyName: 'Tropical Jungle Oasis', 23 propertyType: 'Condominium', 24 accommodatesNumber: '4' 25 }, 26 { 27 lastScrapedDate: '2019-02-11', 28 propertyName: 'Hospede-se com acesso fácil.', 29 propertyType: 'Condominium', 30 accommodatesNumber: '4' 31 } 32 ] 33
次のクエリでは、プロパティ タイプがHouse
、 2
人に対応している、 2019
にリストされている、または最大30
配列のプロパティを検索します。
パイプラインステージ | クエリ | |||||||
---|---|---|---|---|---|---|---|---|
|
| |||||||
|
| |||||||
|
|
Auto Previewを有効にした場合、MongoDB Compass は次のドキュメントを$project
パイプライン ステージの横に表示します。
1 [ 2 { 3 lastScrapedDate: '2019-02-11', 4 propertyName: '2017 , férias no Rio', 5 propertyType: 'House', 6 accommodatesNumber: '2', 7 maximumNumberOfNights: '30' 8 }, 9 { 10 lastScrapedDate: '2019-03-07', 11 propertyName: 'Newly renovated home', 12 propertyType: 'House', 13 accommodatesNumber: '2', 14 maximumNumberOfNights: '30' 15 }, 16 { 17 lastScrapedDate: '2019-02-18', 18 propertyName: 'Vintage House For Rent', 19 propertyType: 'House', 20 accommodatesNumber: '2', 21 maximumNumberOfNights: '30' 22 }, 23 { 24 lastScrapedDate: '2019-02-18', 25 propertyName: '4floor house in Taksim,Taksimde 4katli müstakil ev', 26 propertyType: 'House', 27 accommodatesNumber: '2', 28 maximumNumberOfNights: '30' 29 }, 30 { 31 lastScrapedDate: '2019-02-16', 32 propertyName: '22 Oporto Guesthouse Cordoaria', 33 propertyType: 'House', 34 accommodatesNumber: '2', 35 maximumNumberOfNights: '30' 36 } 37
次のクエリは、 2
から一時的にリストされたプロパティを検索し、 1
から開始される日数の継続を許可します。
パイプラインステージ | クエリ | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||||||||||
|
| |||||||||||||||||
|
|
Auto Previewを有効にした場合、MongoDB Compass は次のドキュメントを$project
パイプライン ステージの横に表示します。
1 [ 2 { 3 lastScrapedDate: '2019-02-11', 4 propertyName: 'Horto flat with small garden', 5 propertyType: 'Apartment', 6 accommodatesNumber: '4', 7 maximumNumberOfNights: '1125' 8 }, 9 { 10 lastScrapedDate: '2019-03-06', 11 propertyName: 'Private Room in Bushwick', 12 propertyType: 'Apartment', 13 accommodatesNumber: '1', 14 maximumNumberOfNights: '1125' 15 }, 16 { 17 lastScrapedDate: '2019-02-11', 18 propertyName: 'Apt Linda Vista Lagoa - Rio', 19 propertyType: 'Apartment', 20 accommodatesNumber: '2', 21 maximumNumberOfNights: '1125' 22 }, 23 { 24 lastScrapedDate: '2019-02-18', 25 propertyName: 'Charming Flat in Downtown Moda', 26 propertyType: 'House', 27 accommodatesNumber: '6', 28 maximumNumberOfNights: '1125' 29 }, 30 { 31 lastScrapedDate: '2019-02-11', 32 propertyName: "Catete's Colonial Big Hause Room B", 33 propertyType: 'House', 34 accommodatesNumber: '8', 35 maximumNumberOfNights: '1125' 36 } 37 ]
次のクエリでは、 3
から始まる接続数と2
以降の人数を受け入れられるプロパティを検索します。
パイプラインステージ | クエリ | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||||||||||
|
| |||||||||||||||||
|
|
Auto Previewを有効にした場合、MongoDB Compass は次のドキュメントを$project
パイプライン ステージの横に表示します。
1 [ 2 { 3 lastScrapedDate: '2019-03-06', 4 propertyName: 'Ocean View Waikiki Marina w/prkg', 5 propertyType: 'Condominium', 6 accommodatesNumber: '2', 7 maximumNumberOfNights: '365' 8 }, 9 { 10 lastScrapedDate: '2019-03-07', 11 propertyName: 'New York City - Upper West Side Apt', 12 propertyType: 'Apartment', 13 accommodatesNumber: '2', 14 maximumNumberOfNights: '360' 15 }, 16 { 17 lastScrapedDate: '2019-03-07', 18 propertyName: 'Sydney Hyde Park City Apartment (checkin from 6am)', 19 propertyType: 'Apartment', 20 accommodatesNumber: '2', 21 maximumNumberOfNights: '30' 22 }, 23 { 24 lastScrapedDate: '2019-03-07', 25 propertyName: 'Private Room (2) in Guest House at Coogee Beach', 26 propertyType: 'House', 27 accommodatesNumber: '2', 28 maximumNumberOfNights: '365' 29 }, 30 { 31 lastScrapedDate: '2019-03-06', 32 propertyName: '~Ao Lele~ Flying Cloud', 33 propertyType: 'Treehouse', 34 accommodatesNumber: '2', 35 maximumNumberOfNights: '30' 36 } 37 ]
Program.cs
ファイルの内容を、インデックスを作成した演算子と実行するクエリのタイプに対して、次のコードで置き換えます。
動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_view
コレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_view
コレクションをクエリできます。
このコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
カーソルを反復処理して、クエリに一致するドキュメントを出力します。
次のクエリは、プロパティ タイプがApartment
またはCondominium
で、 2
人に受け入れられ、 2019
にリストされているプロパティを検索します。
1 using MongoDB.Bson; 2 using MongoDB.Bson.Serialization.Attributes; 3 using MongoDB.Bson.Serialization.Conventions; 4 using MongoDB.Driver; 5 using MongoDB.Driver.Search; 6 7 public class DateNumberToStringQuery 8 { 9 private const string MongoConnectionString = "<connection-string>"; 10 11 public static void Main(string[] args) 12 { 13 // allow automapping of the camelCase database fields to our MovieDocument 14 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; 15 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true); 16 17 // connect to your Atlas cluster 18 var mongoClient = new MongoClient(MongoConnectionString); 19 var airbnbDatabase = mongoClient.GetDatabase("sample_airbnb"); 20 var matViewCollection = airbnbDatabase.GetCollection<matViewDocument>("airbnb_mat_view"); 21 22 // define and run pipeline 23 var results = matViewCollection.Aggregate() 24 .Search(Builders<matViewDocument>.Search.QueryString( 25 airbnb => airbnb.propertyType, 26 "(Apartment OR Condominium) AND accommodatesNumber: 4 AND lastScrapedDate: 2019" 27 ), 28 indexName: "date-number-fields-tutorial") 29 .Limit(5) 30 .Project<matViewDocument>(Builders<matViewDocument>.Projection 31 .Exclude(airbnb => airbnb.Id)) 32 .ToList(); 33 34 // print results 35 foreach (var airbnb in results) 36 { 37 Console.WriteLine(airbnb.ToJson()); 38 } 39 } 40 } 41 42 [ ]43 public class matViewDocument 44 { 45 [ ]46 public string Id { get; set; } 47 public string lastScrapedDate { get; set; } 48 public string propertyName { get; set; } 49 public string propertyType { get; set; } 50 public string accommodatesNumber { get; set; } 51 public string maximumNumberOfNights { get; set; } 52 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のクエリでは、プロパティ タイプがHouse
、 2
人に対応している、 2019
にリストされている、または最大30
配列のプロパティを検索します。
1 using MongoDB.Bson; 2 using MongoDB.Bson.Serialization.Attributes; 3 using MongoDB.Bson.Serialization.Conventions; 4 using MongoDB.Driver; 5 using MongoDB.Driver.Search; 6 7 public class DateNumberToStringQuery 8 { 9 private const string MongoConnectionString = "<connection-string>"; 10 11 public static void Main(string[] args) 12 { 13 // allow automapping of the camelCase database fields to our MovieDocument 14 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; 15 var ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true); 16 17 // connect to your Atlas cluster 18 var mongoClient = new MongoClient(MongoConnectionString); 19 var airbnbDatabase = mongoClient.GetDatabase("sample_airbnb"); 20 var matViewCollection = airbnbDatabase.GetCollection<matViewDocument>("airbnb_mat_view"); 21 22 // define and run pipeline 23 var results = matViewCollection.Aggregate() 24 .Search(Builders<matViewDocument>.Search.QueryString( 25 airbnb => airbnb.propertyType, 26 "House OR accommodatesNumber: 2 OR lastScrapedDate: 2019 OR maximumNumberOfNights: 30" 27 ), 28 indexName: "date-number-fields-tutorial") 29 .Limit(5) 30 .Project<matViewDocument>(Builders<matViewDocument>.Projection 31 .Exclude(airbnb => airbnb.Id)) 32 .ToList(); 33 34 // print results 35 foreach (var airbnb in results) 36 { 37 Console.WriteLine(airbnb.ToJson()); 38 } 39 } 40 } 41 42 [ ]43 public class matViewDocument 44 { 45 [ ]46 public string Id { get; set; } 47 public string lastScrapedDate { get; set; } 48 public string propertyName { get; set; } 49 public string propertyType { get; set; } 50 public string accommodatesNumber { get; set; } 51 public string maximumNumberOfNights { get; set; } 52 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
このコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
カーソルを反復処理して、クエリに一致するドキュメントを出力します。
次のクエリは、 2
から一時的にリストされたプロパティを検索し、 1
から開始される日数の継続を許可します。
1 using MongoDB.Bson; 2 using MongoDB.Bson.Serialization.Attributes; 3 using MongoDB.Bson.Serialization.Conventions; 4 using MongoDB.Driver; 5 using MongoDB.Driver.Search; 6 7 public class DateNumberToStringQuery 8 { 9 private const string MongoConnectionString = "<connection-string>"; 10 11 public static void Main(string[] args) 12 { 13 // allow automapping of the camelCase database fields to our MovieDocument 14 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; 15 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true); 16 17 // connect to your Atlas cluster 18 var mongoClient = new MongoClient(MongoConnectionString); 19 var airbnbDatabase = mongoClient.GetDatabase("sample_airbnb"); 20 var matViewCollection = airbnbDatabase.GetCollection<matViewDocument>("airbnb_mat_view"); 21 22 // define and run pipeline 23 var results = matViewCollection.Aggregate() 24 .Search(Builders<matViewDocument>.Search.Compound() 25 .Should(Builders<matViewDocument>.Search.Autocomplete(airbnb => airbnb.lastScrapedDate, "2")) 26 .Should(Builders<matViewDocument>.Search.Autocomplete(airbnb => airbnb.maximumNumberOfNights, "1")), 27 indexName: "date-number-fields-tutorial") 28 .Limit(5) 29 .Project<matViewDocument>(Builders<matViewDocument>.Projection 30 .Exclude(airbnb => airbnb.Id)) 31 .ToList(); 32 33 // print results 34 foreach (var airbnb in results) 35 { 36 Console.WriteLine(airbnb.ToJson()); 37 } 38 } 39 } 40 41 [ ]42 public class matViewDocument 43 { 44 [ ]45 public string Id { get; set; } 46 public string lastScrapedDate { get; set; } 47 public string propertyName { get; set; } 48 public string propertyType { get; set; } 49 public string accommodatesNumber { get; set; } 50 public string maximumNumberOfNights { get; set; } 51 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のクエリでは、 3
から始まる接続数と2
以降の人数を受け入れられるプロパティを検索します。
1 using MongoDB.Bson; 2 using MongoDB.Bson.Serialization.Attributes; 3 using MongoDB.Bson.Serialization.Conventions; 4 using MongoDB.Driver; 5 using MongoDB.Driver.Search; 6 7 public class DateNumberToStringQuery 8 { 9 private const string MongoConnectionString = "<connection-string>"; 10 11 public static void Main(string[] args) 12 { 13 // allow automapping of the camelCase database fields to our MovieDocument 14 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; 15 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true); 16 17 // connect to your Atlas cluster 18 var mongoClient = new MongoClient(MongoConnectionString); 19 var airbnbDatabase = mongoClient.GetDatabase("sample_airbnb"); 20 var matViewCollection = airbnbDatabase.GetCollection<matViewDocument>("airbnb_mat_view"); 21 22 // define and run pipeline 23 var results = matViewCollection.Aggregate() 24 .Search(Builders<matViewDocument>.Search.Compound() 25 .Should(Builders<matViewDocument>.Search.Autocomplete(airbnb => airbnb.maximumNumberOfNights, "3")) 26 .Should(Builders<matViewDocument>.Search.Autocomplete(airbnb => airbnb.accommodatesNumber, "2")), 27 indexName: "date-number-fields-tutorial") 28 .Limit(5) 29 .Project<matViewDocument>(Builders<matViewDocument>.Projection 30 .Exclude(airbnb => airbnb.Id)) 31 .ToList(); 32 33 // print results 34 foreach (var airbnb in results) 35 { 36 Console.WriteLine(airbnb.ToJson()); 37 } 38 } 39 } 40 41 [ ]42 public class matViewDocument 43 { 44 [ ]45 public string Id { get; set; } 46 public string lastScrapedDate { get; set; } 47 public string propertyName { get; set; } 48 public string propertyType { get; set; } 49 public string accommodatesNumber { get; set; } 50 public string maximumNumberOfNights { get; set; } 51 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
Program.cs
ファイルをコンパイルして実行します。
dotnet run Program.cs
1 { 2 "lastScrapedDate": "2019-03-06", 3 "propertyName": "LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!", 4 "propertyType": "Condominium", 5 "accommodatesNumber": "4", 6 "maximumNumberOfNights": "1125" 7 } 8 { 9 "lastScrapedDate": "2019-03-06", 10 "propertyName": "Makaha Valley Paradise with OceanView", 11 "propertyType": "Condominium", 12 "accommodatesNumber": "4", 13 "maximumNumberOfNights": "180" 14 } 15 { 16 "lastScrapedDate": "2019-03-06", 17 "propertyName": "March 2019 availability! Oceanview on Sugar Beach!", 18 "propertyType": "Condominium", 19 "accommodatesNumber": "4", 20 "maximumNumberOfNights": "1125" 21 } 22 { 23 "lastScrapedDate": "2019-03-06", 24 "propertyName": "Tropical Jungle Oasis", 25 "propertyType": "Condominium", 26 "accommodatesNumber": "4", 27 "maximumNumberOfNights": "1125" 28 } 29 { 30 "lastScrapedDate": "2019-02-11", 31 "propertyName": "Hospede-se com acesso fácil.", 32 "propertyType": "Condominium", 33 "accommodatesNumber": "4", 34 "maximumNumberOfNights": "1125" 35 }
dotnet run Program.cs
1 { 2 "lastScrapedDate": "2019-02-11", 3 "propertyName": "2017 , férias no Rio", 4 "propertyType": "House", 5 "accommodatesNumber": "2", 6 "maximumNumberOfNights": "30" 7 } 8 { 9 "lastScrapedDate": "2019-03-07", 10 "propertyName": "Newly renovated home", 11 "propertyType": "House", 12 "accommodatesNumber": "2", 13 "maximumNumberOfNights": "30" 14 } 15 { 16 "lastScrapedDate": "2019-02-18", 17 "propertyName": "Vintage House For Rent", 18 "propertyType": "House", 19 "accommodatesNumber": "2", 20 "maximumNumberOfNights": "30" 21 } 22 { 23 "lastScrapedDate": "2019-02-18", 24 "propertyName": "4floor house in Taksim,Taksimde 4katli müstakil ev", 25 "propertyType": "House", 26 "accommodatesNumber": "2", 27 "maximumNumberOfNights": "30" 28 } 29 { 30 "lastScrapedDate": "2019-02-16", 31 "propertyName": "22 Oporto Guesthouse Cordoaria", 32 "propertyType": "House", 33 "accommodatesNumber": "2", 34 "maximumNumberOfNights": "30" 35 }
dotnet run Program.cs
1 { 2 "lastScrapedDate": "2019-02-11", 3 "propertyName": "Horto flat with small garden", 4 "propertyType": "Apartment", 5 "accommodatesNumber": "4", 6 "maximumNumberOfNights": "1125" 7 } 8 { 9 "lastScrapedDate": "2019-03-06", 10 "propertyName": "Private Room in Bushwick", 11 "propertyType": "Apartment", 12 "accommodatesNumber": "1", 13 "maximumNumberOfNights": "1125" 14 } 15 { 16 "lastScrapedDate": "2019-02-11", 17 "propertyName": "Apt Linda Vista Lagoa - Rio", 18 "propertyType": "Apartment", 19 "accommodatesNumber": "2", 20 "maximumNumberOfNights": "1125" 21 } 22 { 23 "lastScrapedDate": "2019-02-18", 24 "propertyName": "Charming Flat in Downtown Moda", 25 "propertyType": "House", 26 "accommodatesNumber": "6", 27 "maximumNumberOfNights": "1125" 28 } 29 { 30 "lastScrapedDate": "2019-02-11", 31 "propertyName": "Catete's Colonial Big Hause Room B", 32 "propertyType": "House", 33 "accommodatesNumber": "8", 34 "maximumNumberOfNights": "1125" 35 }
dotnet run Program.cs
1 { 2 "lastScrapedDate": "2019-03-06", 3 "propertyName": "Ocean View Waikiki Marina w/prkg", 4 "propertyType": "Condominium", 5 "accommodatesNumber": "2", 6 "maximumNumberOfNights": "365" 7 } 8 { 9 "lastScrapedDate": "2019-03-07", 10 "propertyName": "New York City - Upper West Side Apt", 11 "propertyType": "Apartment", 12 "accommodatesNumber": "2", 13 "maximumNumberOfNights": "360" 14 } 15 { 16 "lastScrapedDate": "2019-03-07", 17 "propertyName": "Sydney Hyde Park City Apartment (checkin from 6am)", 18 "propertyType": "Apartment", 19 "accommodatesNumber": "2", 20 "maximumNumberOfNights": "30" 21 } 22 { 23 "lastScrapedDate": "2019-03-07", 24 "propertyName": "Private Room (2) in Guest House at Coogee Beach", 25 "propertyType": "House", 26 "accommodatesNumber": "2", 27 "maximumNumberOfNights": "365" 28 } 29 { 30 "lastScrapedDate": "2019-03-06", 31 "propertyName": "~Ao Lele~ Flying Cloud", 32 "propertyType": "Treehouse", 33 "accommodatesNumber": "2", 34 "maximumNumberOfNights": "30" 35 }
インデックスを作成した演算子のコード例をコピーして date-number-to-string-query.go
ファイルに貼り付けます。
動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_view
コレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_view
コレクションをクエリできます。
次のクエリは、プロパティ タイプがApartment
またはCondominium
で、 2
人に受け入れられ、 2019
にリストされているプロパティを検索します。
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 func main() { 14 var err error 15 // connect to the Atlas cluster 16 ctx := context.Background() 17 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 18 if err != nil { 19 panic(err) 20 } 21 defer client.Disconnect(ctx) 22 // set namespace 23 collection := client.Database("sample_airbnb").Collection("airbnb_mat_view") 24 // define pipeline 25 searchStage := bson.D{{"$search", bson.D{ 26 {"index", "date-number-fields-tutorial"}, 27 {"queryString", bson.D{ 28 {"defaultPath", "propertyType"}, 29 {"query", "propertyType: (Apartment OR Condominium) AND accommodatesNumber: 4 AND lastScrapedDate: 2019"}, 30 }}}}} 31 limitStage := bson.D{{"$limit", 5}} 32 projectStage := bson.D{{"$project", bson.D{{"_id", 0}}}} 33 // specify the amount of time the operation can run on the server 34 opts := options.Aggregate().SetMaxTime(5 * time.Second) 35 // run pipeline 36 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 37 if err != nil { 38 panic(err) 39 } 40 // print results 41 var results []bson.D 42 if err = cursor.All(context.TODO(), &results); err != nil { 43 panic(err) 44 } 45 for _, result := range results { 46 fmt.Println(result) 47 } 48 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のクエリでは、プロパティ タイプがHouse
、 2
人に対応している、 2019
にリストされている、または最大30
配列のプロパティを検索します。
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 func main() { 14 var err error 15 // connect to the Atlas cluster 16 ctx := context.Background() 17 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 18 if err != nil { 19 panic(err) 20 } 21 defer client.Disconnect(ctx) 22 // set namespace 23 collection := client.Database("sample_airbnb").Collection("airbnb_mat_view") 24 // define pipeline 25 searchStage := bson.D{{"$search", bson.D{ 26 {"index", "date-number-fields-tutorial"}, 27 {"queryString", bson.D{ 28 {"defaultPath", "propertyType"}, 29 {"query", "propertyType: House OR accommodatesNumber: 2 OR lastScrapedDate: 2019 OR maximumNumberOfNights: 30"}, 30 }}}}} 31 limitStage := bson.D{{"$limit", 5}} 32 projectStage := bson.D{{"$project", bson.D{{"_id", 0}}}} 33 // specify the amount of time the operation can run on the server 34 opts := options.Aggregate().SetMaxTime(5 * time.Second) 35 // run pipeline 36 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 37 if err != nil { 38 panic(err) 39 } 40 // print results 41 var results []bson.D 42 if err = cursor.All(context.TODO(), &results); err != nil { 43 panic(err) 44 } 45 for _, result := range results { 46 fmt.Println(result) 47 } 48 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のクエリは、 2
から一時的にリストされたプロパティを検索し、 1
から開始される日数の継続を許可します。
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 // define structure of movies collection 14 type MovieCollection struct { 15 title string `bson:"Title,omitempty"` 16 } 17 18 func main() { 19 var err error 20 // connect to the Atlas cluster 21 ctx := context.Background() 22 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-tring>")) 23 if err != nil { 24 panic(err) 25 } 26 defer client.Disconnect(ctx) 27 // set namespace 28 collection := client.Database("sample_airbnb").Collection("airbnb_mat_view") 29 // define pipeline 30 searchStage := bson.D{{"$search", bson.M{ 31 "index": "date-number-fields-tutorial", 32 "compound": bson.M{ 33 "should": bson.A{ 34 bson.M{ 35 "autocomplete": bson.M{ 36 "path": "lastScrapedDate", "query": "2", 37 }, 38 }, 39 bson.M{ 40 "autocomplete": bson.M{ 41 "path": "maximumNumberOfNights", "query": "1", 42 }, 43 }, 44 }, 45 }, 46 }}} 47 limitStage := bson.D{{"$limit", 5}} 48 projectStage := bson.D{{"$project", bson.D{{"_id", 0}}}} 49 // specify the amount of time the operation can run on the server 50 opts := options.Aggregate().SetMaxTime(5 * time.Second) 51 // run pipeline 52 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 53 if err != nil { 54 panic(err) 55 } 56 // print results 57 var results []bson.D 58 if err = cursor.All(context.TODO(), &results); err != nil { 59 panic(err) 60 } 61 for _, result := range results { 62 fmt.Println(result) 63 } 64 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のクエリでは、 3
から始まる接続数と2
以降の人数を受け入れられるプロパティを検索します。
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 // define structure of movies collection 14 type MovieCollection struct { 15 title string `bson:"Title,omitempty"` 16 } 17 18 func main() { 19 var err error 20 // connect to the Atlas cluster 21 ctx := context.Background() 22 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 23 if err != nil { 24 panic(err) 25 } 26 defer client.Disconnect(ctx) 27 // set namespace 28 collection := client.Database("sample_airbnb").Collection("airbnb_mat_view") 29 // define pipeline 30 searchStage := bson.D{{"$search", bson.M{ 31 "index": "date-number-fields-tutorial", 32 "compound": bson.M{ 33 "should": bson.A{ 34 bson.M{ 35 "autocomplete": bson.M{ 36 "path": "maximumNumberOfNights", "query": "3", 37 }, 38 }, 39 bson.M{ 40 "autocomplete": bson.M{ 41 "path": "accommodatesNumber", "query": "2", 42 }, 43 }, 44 }, 45 }, 46 }}} 47 limitStage := bson.D{{"$limit", 5}} 48 projectStage := bson.D{{"$project", bson.D{{"_id", 0}}}} 49 // specify the amount of time the operation can run on the server 50 opts := options.Aggregate().SetMaxTime(5 * time.Second) 51 // run pipeline 52 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 53 if err != nil { 54 panic(err) 55 } 56 // print results 57 var results []bson.D 58 if err = cursor.All(context.TODO(), &results); err != nil { 59 panic(err) 60 } 61 for _, result := range results { 62 fmt.Println(result) 63 } 64 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のコマンドを実行して、コレクションをクエリします。
go run date-number-to-string-query.go
1 [ 2 {lastScrapedDate 2019-03-06} 3 {propertyName LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!} 4 {propertyType Condominium} 5 {accommodatesNumber 4} 6 {maximumNumberOfNights 1125} 7 ] 8 [ 9 {lastScrapedDate 2019-03-06} 10 {propertyName Makaha Valley Paradise with OceanView} 11 {propertyType Condominium} 12 {accommodatesNumber 4} 13 {maximumNumberOfNights 180} 14 ] 15 [ 16 {lastScrapedDate 2019-03-06} 17 {propertyName March 2019 availability! Oceanview on Sugar Beach!} 18 {propertyType Condominium} 19 {accommodatesNumber 4} 20 {maximumNumberOfNights 1125} 21 ] 22 [ 23 {lastScrapedDate 2019-03-06} 24 {propertyName Tropical Jungle Oasis} 25 {propertyType Condominium} 26 {accommodatesNumber 4} 27 {maximumNumberOfNights 1125} 28 ] 29 [ 30 {lastScrapedDate 2019-02-11} 31 {propertyName Hospede-se com acesso fácil.} 32 {propertyType Condominium} 33 {accommodatesNumber 4} 34 {maximumNumberOfNights 1125} 35 ]
go run date-number-to-string-query.go
1 [ 2 {lastScrapedDate 2019-02-11} 3 {propertyName 2017 , férias no Rio} 4 {propertyType House} 5 {accommodatesNumber 2} 6 {maximumNumberOfNights 30} 7 ] 8 [ 9 {lastScrapedDate 2019-03-07} 10 {propertyName Newly renovated home} 11 {propertyType House} 12 {accommodatesNumber 2} 13 {maximumNumberOfNights 30} 14 ] 15 [ 16 {lastScrapedDate 2019-02-18} 17 {propertyName Vintage House For Rent} 18 {propertyType House} 19 {accommodatesNumber 2} 20 {maximumNumberOfNights 30} 21 ] 22 [ 23 {lastScrapedDate 2019-02-18} 24 {propertyName 4floor house in Taksim,Taksimde 4katli müstakil ev} 25 {propertyType House} 26 {accommodatesNumber 2} 27 {maximumNumberOfNights 30} 28 ] 29 [ 30 {lastScrapedDate 2019-02-16} 31 {propertyName 22 Oporto Guesthouse Cordoaria} 32 {propertyType House} 33 {accommodatesNumber 2} 34 {maximumNumberOfNights 30} 35 ]
go run date-number-to-string-query.go
1 [ 2 {lastScrapedDate 2019-02-11} 3 {propertyName Horto flat with small garden} 4 {propertyType Apartment} 5 {accommodatesNumber 4} 6 {maximumNumberOfNights 1125} 7 ] 8 [ 9 {lastScrapedDate 2019-03-06} 10 {propertyName Private Room in Bushwick} 11 {propertyType Apartment} 12 {accommodatesNumber 1} 13 {maximumNumberOfNights 1125} 14 ] 15 [ 16 {lastScrapedDate 2019-02-11} 17 {propertyName Apt Linda Vista Lagoa - Rio} 18 {propertyType Apartment} 19 {accommodatesNumber 2} 20 {maximumNumberOfNights 1125} 21 ] 22 [ 23 {lastScrapedDate 2019-02-18} 24 {propertyName Charming Flat in Downtown Moda} 25 {propertyType House} 26 {accommodatesNumber 6} 27 {maximumNumberOfNights 1125} 28 ] 29 [ 30 {lastScrapedDate 2019-02-11} 31 {propertyName Catete's Colonial Big Hause Room B} 32 {propertyType House} 33 {accommodatesNumber 8} 34 {maximumNumberOfNights 1125} 35 ]
go run date-number-to-string-query.go
1 [ 2 {lastScrapedDate 2019-03-06} 3 {propertyName Ocean View Waikiki Marina w/prkg} 4 {propertyType Condominium} 5 {accommodatesNumber 2} 6 {maximumNumberOfNights 365} 7 ] 8 [ 9 {lastScrapedDate 2019-03-07} 10 {propertyName New York City - Upper West Side Apt} 11 {propertyType Apartment} 12 {accommodatesNumber 2} 13 {maximumNumberOfNights 360} 14 ] 15 [ 16 {lastScrapedDate 2019-03-07} 17 {propertyName Sydney Hyde Park City Apartment (checkin from 6am)} 18 {propertyType Apartment} 19 {accommodatesNumber 2} 20 {maximumNumberOfNights 30} 21 ] 22 [ 23 {lastScrapedDate 2019-03-07} 24 {propertyName Private Room (2) in Guest House at Coogee Beach} 25 {propertyType House} 26 {accommodatesNumber 2} 27 {maximumNumberOfNights 365} 28 ] 29 [ 30 {lastScrapedDate 2019-03-06} 31 {propertyName ~Ao Lele~ Flying Cloud} 32 {propertyType Treehouse} 33 {accommodatesNumber 2} 34 {maximumNumberOfNights 30} 35 ]
インデックスを作成した演算子のコードをコピーして DateNumberToStringQuery.java
ファイルに貼り付けます。
動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_view
コレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_view
コレクションをクエリできます。
このコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
カーソルを反復処理して、クエリに一致するドキュメントを出力します。
注意
Maven 環境でサンプル コードを実行するには、 ファイルのインポート ステートメントの上に以下を追加します。
package com.mongodb.drivers;
次のクエリは、プロパティ タイプがApartment
またはCondominium
で、 2
人に受け入れられ、 2019
にリストされているプロパティを検索します。
1 import java.util.Arrays; 2 import static com.mongodb.client.model.Filters.eq; 3 import static com.mongodb.client.model.Aggregates.limit; 4 import static com.mongodb.client.model.Aggregates.project; 5 import static com.mongodb.client.model.Projections.excludeId; 6 import static com.mongodb.client.model.Projections.fields; 7 import com.mongodb.client.MongoClient; 8 import com.mongodb.client.MongoClients; 9 import com.mongodb.client.MongoCollection; 10 import com.mongodb.client.MongoDatabase; 11 import org.bson.Document; 12 13 public class DateNumberToStringQuery { 14 public static void main( String[] args ) { 15 // define query 16 Document agg = new Document("$search", 17 new Document ("index", "date-number-fields-tutorial") 18 .append("queryString", 19 new Document("defaultPath", "propertyType") 20 .append("query", "propertyType: (Apartment OR Condominium) AND accommodatesNumber: 4 AND lastScrapedDate: 2019"))); 21 22 // specify connection 23 String uri = "<connection-string>"; 24 25 // establish connection and set namespace 26 try (MongoClient mongoClient = MongoClients.create(uri)) { 27 MongoDatabase database = mongoClient.getDatabase("sample_airbnb"); 28 MongoCollection<Document> collection = database.getCollection("airbnb_mat_view"); 29 // run query and print results 30 collection.aggregate(Arrays.asList(agg, 31 limit(5), 32 project(fields(excludeId()) )) 33 ).forEach(doc -> System.out.println(doc.toJson())); 34 } 35 } 36 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のクエリでは、プロパティ タイプがHouse
、 2
人に対応している、 2019
にリストされている、または最大30
配列のプロパティを検索します。
1 import java.util.Arrays; 2 import static com.mongodb.client.model.Filters.eq; 3 import static com.mongodb.client.model.Aggregates.limit; 4 import static com.mongodb.client.model.Aggregates.project; 5 import static com.mongodb.client.model.Projections.excludeId; 6 import static com.mongodb.client.model.Projections.fields; 7 import com.mongodb.client.MongoClient; 8 import com.mongodb.client.MongoClients; 9 import com.mongodb.client.MongoCollection; 10 import com.mongodb.client.MongoDatabase; 11 import org.bson.Document; 12 13 public class DateNumberToStringQuery { 14 public static void main( String[] args ) { 15 // define query 16 Document agg = new Document("$search", 17 new Document ("index", "date-number-fields-tutorial") 18 .append("queryString", 19 new Document("defaultPath", "propertyType") 20 .append("query", "propertyType: House OR accommodatesNumber: 2 OR lastScrapedDate: 2019 OR maximumNumberOfNights: 30"))); 21 22 // specify connection 23 String uri = "<connection-string>"; 24 25 // establish connection and set namespace 26 try (MongoClient mongoClient = MongoClients.create(uri)) { 27 MongoDatabase database = mongoClient.getDatabase("sample_airbnb"); 28 MongoCollection<Document> collection = database.getCollection("airbnb_mat_view"); 29 // run query and print results 30 collection.aggregate(Arrays.asList(agg, 31 limit(5), 32 project(fields(excludeId()) )) 33 ).forEach(doc -> System.out.println(doc.toJson())); 34 } 35 } 36 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
このコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
カーソルを反復処理して、クエリに一致するドキュメントを出力します。
注意
Maven 環境でサンプル コードを実行するには、 ファイルのインポート ステートメントの上に以下を追加します。
package com.mongodb.drivers;
次のクエリは、 2
から一時的にリストされたプロパティを検索し、 1
から開始される日数の継続を許可します。
1 import java.util.Arrays; 2 import static com.mongodb.client.model.Filters.eq; 3 import static com.mongodb.client.model.Aggregates.limit; 4 import static com.mongodb.client.model.Aggregates.project; 5 import static com.mongodb.client.model.Projections.excludeId; 6 import static com.mongodb.client.model.Projections.fields; 7 import com.mongodb.client.MongoClient; 8 import com.mongodb.client.MongoClients; 9 import com.mongodb.client.MongoCollection; 10 import com.mongodb.client.MongoDatabase; 11 import org.bson.Document; 12 13 public class DateNumberToStringQuery { 14 public static void main( String[] args ) { 15 // define query 16 Document agg = new Document("$search", 17 new Document ("index", "date-number-fields-tutorial") 18 .append("compound", 19 new Document("should", Arrays.asList( 20 new Document("autocomplete", 21 new Document("path", "lastScrapedDate") 22 .append("query", "2")), 23 new Document("autocomplete", 24 new Document("path", "maximumNumberOfNights") 25 .append("query", "1")))))); 26 27 // specify connection 28 String uri = "<connection-string>"; 29 30 // establish connection and set namespace 31 try (MongoClient mongoClient = MongoClients.create(uri)) { 32 MongoDatabase database = mongoClient.getDatabase("sample_airbnb"); 33 MongoCollection<Document> collection = database.getCollection("airbnb_mat_view"); 34 // run query and print results 35 collection.aggregate(Arrays.asList( 36 eq("$search", eq("compound", agg)), 37 limit(5), 38 project(fields(excludeId()) )) 39 ).forEach(doc -> System.out.println(doc.toJson())); 40 } 41 } 42 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のクエリでは、 3
から始まる接続数と2
以降の人数を受け入れられるプロパティを検索します。
1 import java.util.Arrays; 2 import static com.mongodb.client.model.Filters.eq; 3 import static com.mongodb.client.model.Aggregates.limit; 4 import static com.mongodb.client.model.Aggregates.project; 5 import static com.mongodb.client.model.Projections.excludeId; 6 import static com.mongodb.client.model.Projections.fields; 7 import com.mongodb.client.MongoClient; 8 import com.mongodb.client.MongoClients; 9 import com.mongodb.client.MongoCollection; 10 import com.mongodb.client.MongoDatabase; 11 import org.bson.Document; 12 13 public class DateNumberToStringQuery { 14 public static void main( String[] args ) { 15 // define query 16 Document agg = new Document("$search", 17 new Document ("index", "date-number-fields-tutorial") 18 .append("compound", 19 new Document("should", Arrays.asList( 20 new Document("autocomplete", 21 new Document("path", "maximumNumberOfNights") 22 .append("query", "3")), 23 new Document("autocomplete", 24 new Document("path", "accommodatesNumber") 25 .append("query", "2")))))); 26 27 // specify connection 28 String uri = "<connection-string>"; 29 30 // establish connection and set namespace 31 try (MongoClient mongoClient = MongoClients.create(uri)) { 32 MongoDatabase database = mongoClient.getDatabase("sample_airbnb"); 33 MongoCollection<Document> collection = database.getCollection("airbnb_mat_view"); 34 // run query and print results 35 collection.aggregate(Arrays.asList( 36 eq("$search", eq("compound", agg)), 37 limit(5), 38 project(fields(excludeId()) )) 39 ).forEach(doc -> System.out.println(doc.toJson())); 40 } 41 } 42 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
DateNumberToStringQuery.java
ファイルをコンパイルして実行します。
javac DateNumberToStringQuery.java java DateNumberToStringQuery
1 { 2 "lastScrapedDate": "2019-03-06", 3 "propertyName": "LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!", 4 "propertyType": "Condominium", 5 "accommodatesNumber": "4", 6 "maximumNumberOfNights": "1125" 7 } 8 { 9 "lastScrapedDate": "2019-03-06", 10 "propertyName": "Makaha Valley Paradise with OceanView", 11 "propertyType": "Condominium", 12 "accommodatesNumber": "4", 13 "maximumNumberOfNights": "180" 14 } 15 { 16 "lastScrapedDate": "2019-03-06", 17 "propertyName": "March 2019 availability! Oceanview on Sugar Beach!", 18 "propertyType": "Condominium", 19 "accommodatesNumber": "4", 20 "maximumNumberOfNights": "1125" 21 } 22 { 23 "lastScrapedDate": "2019-03-06", 24 "propertyName": "Tropical Jungle Oasis", 25 "propertyType": "Condominium", 26 "accommodatesNumber": "4", 27 "maximumNumberOfNights": "1125" 28 } 29 { 30 "lastScrapedDate": "2019-02-11", 31 "propertyName": "Hospede-se com acesso fácil.", 32 "propertyType": "Condominium", 33 "accommodatesNumber": "4", 34 "maximumNumberOfNights": "1125" 35 }
javac DateNumberToStringQuery.java java DateNumberToStringQuery
1 { 2 "lastScrapedDate": "2019-02-11", 3 "propertyName": "2017 , férias no Rio", 4 "propertyType": "House", 5 "accommodatesNumber": "2", 6 "maximumNumberOfNights": "30" 7 } 8 { 9 "lastScrapedDate": "2019-03-07", 10 "propertyName": "Newly renovated home", 11 "propertyType": "House", 12 "accommodatesNumber": "2", 13 "maximumNumberOfNights": "30" 14 } 15 { 16 "lastScrapedDate": "2019-02-18", 17 "propertyName": "Vintage House For Rent", 18 "propertyType": "House", 19 "accommodatesNumber": "2", 20 "maximumNumberOfNights": "30" 21 } 22 { 23 "lastScrapedDate": "2019-02-18", 24 "propertyName": "4floor house in Taksim,Taksimde 4katli müstakil ev", 25 "propertyType": "House", 26 "accommodatesNumber": "2", 27 "maximumNumberOfNights": "30" 28 } 29 { 30 "lastScrapedDate": "2019-02-16", 31 "propertyName": "22 Oporto Guesthouse Cordoaria", 32 "propertyType": "House", 33 "accommodatesNumber": "2", 34 "maximumNumberOfNights": "30" 35 }
javac DateNumberToStringQuery.java java DateNumberToStringQuery
1 { 2 "lastScrapedDate": "2019-02-11", 3 "propertyName": "Horto flat with small garden", 4 "propertyType": "Apartment", 5 "accommodatesNumber": "4", 6 "maximumNumberOfNights": "1125" 7 } 8 { 9 "lastScrapedDate": "2019-03-06", 10 "propertyName": "Private Room in Bushwick", 11 "propertyType": "Apartment", 12 "accommodatesNumber": "1", 13 "maximumNumberOfNights": "1125" 14 } 15 { 16 "lastScrapedDate": "2019-02-11", 17 "propertyName": "Apt Linda Vista Lagoa - Rio", 18 "propertyType": "Apartment", 19 "accommodatesNumber": "2", 20 "maximumNumberOfNights": "1125" 21 } 22 { 23 "lastScrapedDate": "2019-02-18", 24 "propertyName": "Charming Flat in Downtown Moda", 25 "propertyType": "House", 26 "accommodatesNumber": "6", 27 "maximumNumberOfNights": "1125" 28 } 29 { 30 "lastScrapedDate": "2019-02-11", 31 "propertyName": "Catete's Colonial Big Hause Room B", 32 "propertyType": "House", 33 "accommodatesNumber": "8", 34 "maximumNumberOfNights": "1125" 35 }
javac DateNumberToStringQuery.java java DateNumberToStringQuery
1 { 2 "lastScrapedDate": "2019-03-06", 3 "propertyName": "Ocean View Waikiki Marina w/prkg", 4 "propertyType": "Condominium", 5 "accommodatesNumber": "2", 6 "maximumNumberOfNights": "365" 7 } 8 { 9 "lastScrapedDate": "2019-03-07", 10 "propertyName": "New York City - Upper West Side Apt", 11 "propertyType": "Apartment", 12 "accommodatesNumber": "2", 13 "maximumNumberOfNights": "360" 14 } 15 { 16 "lastScrapedDate": "2019-03-07", 17 "propertyName": "Sydney Hyde Park City Apartment (checkin from 6am)", 18 "propertyType": "Apartment", 19 "accommodatesNumber": "2", 20 "maximumNumberOfNights": "30" 21 } 22 { 23 "lastScrapedDate": "2019-03-07", 24 "propertyName": "Private Room (2) in Guest House at Coogee Beach", 25 "propertyType": "House", 26 "accommodatesNumber": "2", 27 "maximumNumberOfNights": "365" 28 } 29 { 30 "lastScrapedDate": "2019-03-06", 31 "propertyName": "~Ao Lele~ Flying Cloud", 32 "propertyType": "Treehouse", 33 "accommodatesNumber": "2", 34 "maximumNumberOfNights": "30" 35 }
インデックスを作成した演算子のコードをコピーして DateNumberToStringQuery.kt
ファイルに貼り付けます。
動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_view
コレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_view
コレクションをクエリできます。
このコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
クエリに一致するドキュメントを
AggregateFlow
インスタンスから出力します。
次のクエリは、プロパティ タイプがApartment
またはCondominium
で、 2
人に受け入れられ、 2019
にリストされているプロパティを検索します。
1 import com.mongodb.client.model.Aggregates.limit 2 import com.mongodb.client.model.Aggregates.project 3 import com.mongodb.client.model.Projections.* 4 import com.mongodb.kotlin.client.coroutine.MongoClient 5 import kotlinx.coroutines.runBlocking 6 import org.bson.Document 7 8 fun main() { 9 // establish connection and set namespace 10 val uri = "<connection-string>" 11 val mongoClient = MongoClient.create(uri) 12 val database = mongoClient.getDatabase("sample_airbnb") 13 val collection = database.getCollection<Document>("airbnb_mat_view") 14 15 runBlocking { 16 // define query 17 val agg = Document( 18 "\$search", 19 Document("index", "date-number-fields-tutorial") 20 .append( 21 "queryString", 22 Document("defaultPath", "propertyType") 23 .append( 24 "query", 25 "propertyType: (Apartment OR Condominium) AND accommodatesNumber: 4 AND lastScrapedDate: 2019" 26 ) 27 ) 28 ) 29 30 // run query and print results 31 val resultsFlow = collection.aggregate<Document>( 32 listOf( 33 agg, 34 limit(5), 35 project(fields(excludeId())) 36 ) 37 ) 38 resultsFlow.collect { println(it) } 39 } 40 mongoClient.close() 41 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のクエリでは、プロパティ タイプがHouse
、 2
人に対応している、 2019
にリストされている、または最大30
配列のプロパティを検索します。
1 import com.mongodb.client.model.Aggregates.limit 2 import com.mongodb.client.model.Aggregates.project 3 import com.mongodb.client.model.Projections.excludeId 4 import com.mongodb.client.model.Projections.fields 5 import com.mongodb.kotlin.client.coroutine.MongoClient 6 import kotlinx.coroutines.runBlocking 7 import org.bson.Document 8 9 fun main() { 10 // establish connection and set namespace 11 val uri = "<connection-string>" 12 val mongoClient = MongoClient.create(uri) 13 val database = mongoClient.getDatabase("sample_airbnb") 14 val collection = database.getCollection<Document>("airbnb_mat_view") 15 16 runBlocking { 17 // define query 18 val agg = Document( 19 "\$search", 20 Document("index", "date-number-fields-tutorial") 21 .append( 22 "queryString", 23 Document("defaultPath", "propertyType") 24 .append( 25 "query", 26 "propertyType: House OR accommodatesNumber: 2 OR lastScrapedDate: 2019 OR maximumNumberOfNights: 30" 27 ) 28 ) 29 ) 30 31 // run query and print results 32 val resultsFlow = collection.aggregate<Document>( 33 listOf( 34 agg, 35 limit(5), 36 project(fields(excludeId())) 37 ) 38 ) 39 resultsFlow.collect { println(it) } 40 } 41 mongoClient.close() 42 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
このコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
クエリに一致するドキュメントを
AggregateFlow
インスタンスから出力します。
次のクエリは、 2
から一時的にリストされたプロパティを検索し、 1
から開始される日数の継続を許可します。
1 import com.mongodb.client.model.Aggregates.limit 2 import com.mongodb.client.model.Aggregates.project 3 import com.mongodb.client.model.Projections.* 4 import com.mongodb.kotlin.client.coroutine.MongoClient 5 import kotlinx.coroutines.runBlocking 6 import org.bson.Document 7 8 fun main() { 9 // establish connection and set namespace 10 val uri = "<connection-string>" 11 val mongoClient = MongoClient.create(uri) 12 val database = mongoClient.getDatabase("sample_airbnb") 13 val collection = database.getCollection<Document>("airbnb_mat_view") 14 15 runBlocking { 16 // define query 17 val agg = Document( 18 "\$search", 19 Document("index", "date-number-fields-tutorial") 20 .append( 21 "compound", 22 Document( 23 "should", listOf( 24 Document( 25 "autocomplete", 26 Document("path", "lastScrapedDate") 27 .append("query", "2") 28 ), 29 Document( 30 "autocomplete", 31 Document("path", "maximumNumberOfNights") 32 .append("query", "1") 33 ) 34 ) 35 ) 36 ) 37 ) 38 39 // run query and print results 40 val resultsFlow = collection.aggregate<Document>( 41 listOf( 42 agg, 43 limit(5), 44 project(fields(excludeId())) 45 ) 46 ) 47 resultsFlow.collect { println(it) } 48 } 49 mongoClient.close() 50 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のクエリでは、 3
から始まる接続数と2
以降の人数を受け入れられるプロパティを検索します。
1 import com.mongodb.client.model.Aggregates.limit 2 import com.mongodb.client.model.Aggregates.project 3 import com.mongodb.client.model.Projections.* 4 import com.mongodb.kotlin.client.coroutine.MongoClient 5 import kotlinx.coroutines.runBlocking 6 import org.bson.Document 7 8 fun main() { 9 // establish connection and set namespace 10 val uri = "<connection-string>" 11 val mongoClient = MongoClient.create(uri) 12 val database = mongoClient.getDatabase("sample_airbnb") 13 val collection = database.getCollection<Document>("airbnb_mat_view") 14 15 runBlocking { 16 // define query 17 val agg = Document( 18 "\$search", 19 Document("index", "date-number-fields-tutorial") 20 .append( 21 "compound", 22 Document( 23 "should", listOf( 24 Document( 25 "autocomplete", 26 Document("path", "maximumNumberOfNights") 27 .append("query", "3") 28 ), 29 Document( 30 "autocomplete", 31 Document("path", "accommodatesNumber") 32 .append("query", "2") 33 ) 34 ) 35 ) 36 ) 37 ) 38 39 // run query and print results 40 val resultsFlow = collection.aggregate<Document>( 41 listOf( 42 agg, 43 limit(5), 44 project(fields(excludeId())) 45 ) 46 ) 47 resultsFlow.collect { println(it) } 48 } 49 mongoClient.close() 50 }
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
DateNumberToStringQuery.kt
ファイルを実行します。
IDE でDateNumberToStringQuery.kt
プログラムを実行すると、次のドキュメントが出力されます。
Document{{lastScrapedDate=2019-03-06, propertyName=Tropical Jungle Oasis, propertyType=Condominium, accommodatesNumber=4, maximumNumberOfNights=1125}} Document{{lastScrapedDate=2019-03-06, propertyName=Honolulu 1 BR/1Bath Condo - Hilton Hawaiian, propertyType=Condominium, accommodatesNumber=4, maximumNumberOfNights=7}} Document{{lastScrapedDate=2019-03-06, propertyName=Beautiful Apt, Tropical Resort, Steps to the Beach, propertyType=Condominium, accommodatesNumber=4, maximumNumberOfNights=45}} Document{{lastScrapedDate=2019-03-06, propertyName=Ocean View in the heart of Waikiki, propertyType=Condominium, accommodatesNumber=4, maximumNumberOfNights=1125}} Document{{lastScrapedDate=2019-03-06, propertyName=Aloha, Kihei Bay Surf, New Pool and BBQ, propertyType=Condominium, accommodatesNumber=4, maximumNumberOfNights=1125}}
IDE でDateNumberToStringQuery.kt
プログラムを実行すると、次のドキュメントが出力されます。
Document{{lastScrapedDate=2019-03-11, propertyName=This room is perfect for responsible guests, propertyType=House, accommodatesNumber=2, maximumNumberOfNights=30}} Document{{lastScrapedDate=2019-03-06, propertyName=Queen Room at Beautiful Upscale Organic Farm, propertyType=House, accommodatesNumber=2, maximumNumberOfNights=30}} Document{{lastScrapedDate=2019-03-11, propertyName=Incredible space with amazing views, propertyType=House, accommodatesNumber=2, maximumNumberOfNights=30}} Document{{lastScrapedDate=2019-02-16, propertyName=Varanda Porto, propertyType=House, accommodatesNumber=2, maximumNumberOfNights=30}} Document{{lastScrapedDate=2019-03-06, propertyName=Bright, Clean, Quiet, Modern, propertyType=House, accommodatesNumber=2, maximumNumberOfNights=30}}
IDE でDateNumberToStringQuery.kt
プログラムを実行すると、次のドキュメントが出力されます。
Document{{lastScrapedDate=2019-03-07, propertyName=Deluxe Loft Suite, propertyType=Apartment, accommodatesNumber=4, maximumNumberOfNights=1125}} Document{{lastScrapedDate=2019-03-11, propertyName=3 chambres au coeur du Plateau, propertyType=Apartment, accommodatesNumber=6, maximumNumberOfNights=1125}} Document{{lastScrapedDate=2019-02-16, propertyName=Be Happy in Porto, propertyType=Loft, accommodatesNumber=2, maximumNumberOfNights=1125}} Document{{lastScrapedDate=2019-02-18, propertyName=Cozy house at Beyoğlu, propertyType=Apartment, accommodatesNumber=2, maximumNumberOfNights=1125}} Document{{lastScrapedDate=2019-02-16, propertyName=Downtown Oporto Inn (room cleaning), propertyType=Hostel, accommodatesNumber=2, maximumNumberOfNights=1125}}
IDE でDateNumberToStringQuery.kt
プログラムを実行すると、次のドキュメントが出力されます。
Document{{lastScrapedDate=2019-03-06, propertyName=Ocean View Waikiki Marina w/prkg, propertyType=Condominium, accommodatesNumber=2, maximumNumberOfNights=365}} Document{{lastScrapedDate=2019-03-07, propertyName=New York City - Upper West Side Apt, propertyType=Apartment, accommodatesNumber=2, maximumNumberOfNights=360}} Document{{lastScrapedDate=2019-03-06, propertyName=~Ao Lele~ Flying Cloud, propertyType=Treehouse, accommodatesNumber=2, maximumNumberOfNights=30}} Document{{lastScrapedDate=2019-03-06, propertyName=Banyan Bungalow, propertyType=Bungalow, accommodatesNumber=2, maximumNumberOfNights=300}} Document{{lastScrapedDate=2019-03-06, propertyName=Luxury 1-Bdrm in Downtown Brooklyn, propertyType=Apartment, accommodatesNumber=2, maximumNumberOfNights=30}}
インデックスを作成した演算子のコードをコピーして date-number-to-string-query.js
ファイルに貼り付けます。
動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_view
コレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_view
コレクションをクエリできます。
このコード例では、次のタスクを実行します。
MongoDB の
Node.js
ドライバーであるmongodb
をインポートします。Atlas クラスターへの接続を確立するための MongoClient クラスのインスタンスを作成します。
カーソルを反復処理して、クエリに一致するドキュメントを出力します。
次のクエリは、プロパティ タイプがApartment
またはCondominium
で、 2
人に受け入れられ、 2019
にリストされているプロパティを検索します。
1 const MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 '$search': { 7 'index': 'date-number-fields-tutorial', 8 'queryString': { 9 'defaultPath': 'propertyType', 10 'query': 'propertyType: (Apartment OR Condominium) AND accommodatesNumber: 4 AND lastScrapedDate: 2019' 11 } 12 } 13 }, { 14 '$limit': 5 15 }, { 16 '$project': { 17 '_id': 0 18 } 19 } 20 ]; 21 22 MongoClient.connect( 23 "<connection-string>", 24 { useNewUrlParser: true, useUnifiedTopology: true }, 25 async function (connectErr, client) { 26 assert.equal(null, connectErr); 27 const coll = client.db("sample_airbnb").collection("airbnb_mat_view"); 28 let cursor = await coll.aggregate(agg); 29 await cursor.forEach((doc) => console.log(doc)); 30 client.close(); 31 } 32 );
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のクエリでは、プロパティ タイプがHouse
、 2
人に対応している、 2019
にリストされている、または最大30
配列のプロパティを検索します。
1 const MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 '$search': { 7 'index': 'date-number-fields-tutorial', 8 'queryString': { 9 'defaultPath': 'propertyType', 10 'query': 'propertyType: House OR accommodatesNumber: 2 OR lastScrapedDate: 2019 OR maximumNumberOfNights: 30' 11 } 12 } 13 }, { 14 '$limit': 5 15 }, { 16 '$project': { 17 '_id': 0 18 } 19 } 20 ]; 21 22 MongoClient.connect( 23 "<connection-string>", 24 { useNewUrlParser: true, useUnifiedTopology: true }, 25 async function (connectErr, client) { 26 assert.equal(null, connectErr); 27 const coll = client.db("sample_airbnb").collection("airbnb_mat_view"); 28 let cursor = await coll.aggregate(agg); 29 await cursor.forEach((doc) => console.log(doc)); 30 client.close(); 31 } 32 );
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
このコード例では、次のタスクを実行します。
MongoDB の
Node.js
ドライバーであるmongodb
をインポートします。Atlas クラスターへの接続を確立するための MongoClient クラスのインスタンスを作成します。
カーソルを反復処理して、クエリに一致するドキュメントを出力します。
次のクエリは、 2
から一時的にリストされたプロパティを検索し、 1
から開始される日数の継続を許可します。
1 const MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 '$search': { 7 'index': 'date-number-fields-tutorial', 8 'compound': { 9 'should': [ 10 { 11 'autocomplete': { 12 'path': 'lastScrapedDate', 13 'query': '2' 14 } 15 }, { 16 'autocomplete': { 17 'path': 'maximumNumberOfNights', 18 'query': '1' 19 } 20 } 21 ] 22 } 23 } 24 }, { 25 '$limit': 5 26 }, { 27 '$project': { 28 '_id': 0 29 } 30 } 31 ]; 32 33 MongoClient.connect( 34 "<connection-string>", 35 { useNewUrlParser: true, useUnifiedTopology: true }, 36 async function (connectErr, client) { 37 assert.equal(null, connectErr); 38 const coll = client.db("sample_airbnb").collection("airbnb_mat_view"); 39 let cursor = await coll.aggregate(agg); 40 await cursor.forEach((doc) => console.log(doc)); 41 client.close(); 42 } 43 );
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のクエリでは、 3
から始まる接続数と2
以降の人数を受け入れられるプロパティを検索します。
1 const MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 '$search': { 7 'index': 'date-number-fields-tutorial', 8 'compound': { 9 'should': [ 10 { 11 'autocomplete': { 12 'path': 'maximumNumberOfNights', 13 'query': '3' 14 } 15 }, { 16 'autocomplete': { 17 'path': 'accommodatesNumber', 18 'query': '2' 19 } 20 } 21 ] 22 } 23 } 24 }, { 25 '$limit': 5 26 }, { 27 '$project': { 28 '_id': 0 29 } 30 } 31 ]; 32 33 MongoClient.connect( 34 "<connection-string>", 35 { useNewUrlParser: true, useUnifiedTopology: true }, 36 async function (connectErr, client) { 37 assert.equal(null, connectErr); 38 const coll = client.db("sample_airbnb").collection("airbnb_mat_view"); 39 let cursor = await coll.aggregate(agg); 40 await cursor.forEach((doc) => console.log(doc)); 41 client.close(); 42 } 43 );
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のコマンドを実行して、コレクションをクエリします。
node date-number-to-string-query.js
1 { 2 lastScrapedDate: '2019-03-06', 3 propertyName: 'LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!', 4 propertyType: 'Condominium', 5 accommodatesNumber: '4', 6 maximumNumberOfNights: '1125' 7 } 8 { 9 lastScrapedDate: '2019-03-06', 10 propertyName: 'Makaha Valley Paradise with OceanView', 11 propertyType: 'Condominium', 12 accommodatesNumber: '4', 13 maximumNumberOfNights: '180' 14 } 15 { 16 lastScrapedDate: '2019-03-06', 17 propertyName: 'March 2019 availability! Oceanview on Sugar Beach!', 18 propertyType: 'Condominium', 19 accommodatesNumber: '4', 20 maximumNumberOfNights: '1125' 21 } 22 { 23 lastScrapedDate: '2019-03-06', 24 propertyName: 'Tropical Jungle Oasis', 25 propertyType: 'Condominium', 26 accommodatesNumber: '4', 27 maximumNumberOfNights: '1125' 28 } 29 { 30 lastScrapedDate: '2019-02-11', 31 propertyName: 'Hospede-se com acesso fácil.', 32 propertyType: 'Condominium', 33 accommodatesNumber: '4', 34 maximumNumberOfNights: '1125' 35 } 36
node date-number-to-string-query.js
1 { 2 lastScrapedDate: '2019-02-11', 3 propertyName: '2017 , férias no Rio', 4 propertyType: 'House', 5 accommodatesNumber: '2', 6 maximumNumberOfNights: '30' 7 } 8 { 9 lastScrapedDate: '2019-03-07', 10 propertyName: 'Newly renovated home', 11 propertyType: 'House', 12 accommodatesNumber: '2', 13 maximumNumberOfNights: '30' 14 } 15 { 16 lastScrapedDate: '2019-02-18', 17 propertyName: 'Vintage House For Rent', 18 propertyType: 'House', 19 accommodatesNumber: '2', 20 maximumNumberOfNights: '30' 21 } 22 { 23 lastScrapedDate: '2019-02-18', 24 propertyName: '4floor house in Taksim,Taksimde 4katli müstakil ev', 25 propertyType: 'House', 26 accommodatesNumber: '2', 27 maximumNumberOfNights: '30' 28 } 29 { 30 lastScrapedDate: '2019-02-16', 31 propertyName: '22 Oporto Guesthouse Cordoaria', 32 propertyType: 'House', 33 accommodatesNumber: '2', 34 maximumNumberOfNights: '30' 35 }
node date-number-to-string-query.js
1 { 2 lastScrapedDate: '2019-02-11', 3 propertyName: 'Horto flat with small garden', 4 propertyType: 'Apartment', 5 accommodatesNumber: '4', 6 maximumNumberOfNights: '1125' 7 } 8 { 9 lastScrapedDate: '2019-03-06', 10 propertyName: 'Private Room in Bushwick', 11 propertyType: 'Apartment', 12 accommodatesNumber: '1', 13 maximumNumberOfNights: '1125' 14 } 15 { 16 lastScrapedDate: '2019-02-11', 17 propertyName: 'Apt Linda Vista Lagoa - Rio', 18 propertyType: 'Apartment', 19 accommodatesNumber: '2', 20 maximumNumberOfNights: '1125' 21 } 22 { 23 lastScrapedDate: '2019-02-18', 24 propertyName: 'Charming Flat in Downtown Moda', 25 propertyType: 'House', 26 accommodatesNumber: '6', 27 maximumNumberOfNights: '1125' 28 } 29 { 30 lastScrapedDate: '2019-02-11', 31 propertyName: "Catete's Colonial Big Hause Room B", 32 propertyType: 'House', 33 accommodatesNumber: '8', 34 maximumNumberOfNights: '1125' 35 }
node date-number-to-string-query.js
1 { 2 lastScrapedDate: '2019-03-06', 3 propertyName: 'Ocean View Waikiki Marina w/prkg', 4 propertyType: 'Condominium', 5 accommodatesNumber: '2', 6 maximumNumberOfNights: '365' 7 } 8 { 9 lastScrapedDate: '2019-03-07', 10 propertyName: 'New York City - Upper West Side Apt', 11 propertyType: 'Apartment', 12 accommodatesNumber: '2', 13 maximumNumberOfNights: '360' 14 } 15 { 16 lastScrapedDate: '2019-03-07', 17 propertyName: 'Sydney Hyde Park City Apartment (checkin from 6am)', 18 propertyType: 'Apartment', 19 accommodatesNumber: '2', 20 maximumNumberOfNights: '30' 21 } 22 { 23 lastScrapedDate: '2019-03-07', 24 propertyName: 'Private Room (2) in Guest House at Coogee Beach', 25 propertyType: 'House', 26 accommodatesNumber: '2', 27 maximumNumberOfNights: '365' 28 } 29 { 30 lastScrapedDate: '2019-03-06', 31 propertyName: '~Ao Lele~ Flying Cloud', 32 propertyType: 'Treehouse', 33 accommodatesNumber: '2', 34 maximumNumberOfNights: '30' 35 }
インデックスを作成した演算子のコード例をコピーして date-number-to-string-query.py
ファイルに貼り付けます。
動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_view
コレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_view
コレクションをクエリできます。
このコード例では、次のタスクを実行します。
pymongo
、 MongoDBのPythonドライバー、および DNSシードリスト接続文字列を使用してpymongo
をAtlas
に接続するために必要なdns
モジュールをインポートします。Atlas クラスターへの接続を確立するための
MongoClient
クラスのインスタンスを作成します。カーソルを反復処理して、クエリに一致するドキュメントを出力します。
次のクエリは、プロパティ タイプがApartment
またはCondominium
で、 2
人に受け入れられ、 2019
にリストされているプロパティを検索します。
1 import pymongo 2 import dns 3 4 client = pymongo.MongoClient('<connection-string>') 5 result = client['sample_airbnb']['airbnb_mat_view'].aggregate([ 6 { 7 '$search': { 8 'index': 'date-number-fields-tutorial', 9 'queryString': { 10 'defaultPath': 'propertyType', 11 'query': 'propertyType: (Apartment OR Condominium) AND accommodatesNumber: 4 AND lastScrapedDate: 2019' 12 } 13 } 14 }, { 15 '$limit': 5 16 }, { 17 '$project': { 18 '_id': 0 19 } 20 } 21 ]) 22 23 for i in result: 24 print(i)
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のクエリでは、プロパティ タイプがHouse
、 2
人に対応している、 2019
にリストされている、または最大30
配列のプロパティを検索します。
1 import pymongo 2 import dns 3 4 client = pymongo.MongoClient('<connection-string>') 5 result = client['sample_airbnb']['airbnb_mat_view'].aggregate([ 6 { 7 '$search': { 8 'index': 'date-number-fields-tutorial', 9 'queryString': { 10 'defaultPath': 'propertyType', 11 'query': 'propertyType: House OR accommodatesNumber: 2 OR lastScrapedDate: 2019 OR maximumNumberOfNights: 30' 12 } 13 } 14 }, { 15 '$limit': 5 16 }, { 17 '$project': { 18 '_id': 0 19 } 20 } 21 ]) 22 23 for i in result: 24 print(i)
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
このコード例では、次のタスクを実行します。
pymongo
、MongoDB の Python ドライバー、およびDNSシード リスト接続文字列を使用してpymongo
をAtlas
に接続するために必要なdns
モジュールをインポートします。Atlas クラスターへの接続を確立するための
MongoClient
クラスのインスタンスを作成します。カーソルを反復処理して、クエリに一致するドキュメントを出力します。
次のクエリは、 2
から一時的にリストされたプロパティを検索し、 1
から開始される日数の継続を許可します。
1 import pymongo 2 import dns 3 4 client = pymongo.MongoClient('<connection-string>') 5 result = client['sample_airbnb']['airbnb_mat_view'].aggregate([ 6 { 7 '$search': { 8 'index': 'date-number-fields-tutorial', 9 'compound': { 10 'should': [ 11 { 12 'autocomplete': { 13 'path': 'lastScrapedDate', 14 'query': '2' 15 } 16 }, { 17 'autocomplete': { 18 'path': 'maximumNumberOfNights', 19 'query': '1' 20 } 21 } 22 ] 23 } 24 } 25 }, { 26 '$limit': 5 27 }, { 28 '$project': { 29 '_id': 0 30 } 31 } 32 ]) 33 34 for i in result: 35 print(i)
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のクエリでは、 3
から始まる接続数と2
以降の人数を受け入れられるプロパティを検索します。
1 import pymongo 2 import dns 3 4 client = pymongo.MongoClient('<connection-string>') 5 result = client['sample_airbnb']['airbnb_mat_view'].aggregate([ 6 { 7 '$search': { 8 'index': 'date-number-fields-tutorial', 9 'compound': { 10 'should': [ 11 { 12 'autocomplete': { 13 'path': 'maximumNumberOfNights', 14 'query': '3' 15 } 16 }, { 17 'autocomplete': { 18 'path': 'accommodatesNumber', 19 'query': '2' 20 } 21 } 22 ] 23 } 24 } 25 }, { 26 '$limit': 5 27 }, { 28 '$project': { 29 '_id': 0 30 } 31 } 32 ]) 33 34 for i in result: 35 print(i)
サンプルを実行する前に、<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
次のコマンドを実行して、コレクションをクエリします。
python date-number-to-string-query.py
1 { 2 'lastScrapedDate': '2019-03-06', 3 'propertyName': 'LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!', 4 'propertyType': 'Condominium', 5 'accommodatesNumber': '4', 6 'maximumNumberOfNights': '1125' 7 } 8 { 9 'lastScrapedDate': '2019-03-06', 10 'propertyName': 'Makaha Valley Paradise with OceanView', 11 'propertyType': 'Condominium', 12 'accommodatesNumber': '4', 13 'maximumNumberOfNights': '180' 14 } 15 { 16 'lastScrapedDate': '2019-03-06', 17 'propertyName': 'March 2019 availability! Oceanview on Sugar Beach!', 18 'propertyType': 'Condominium', 19 'accommodatesNumber': '4', 20 'maximumNumberOfNights': '1125' 21 } 22 { 23 'lastScrapedDate': '2019-03-06', 24 'propertyName': 'Tropical Jungle Oasis', 25 'propertyType': 'Condominium', 26 'accommodatesNumber': '4', 27 'maximumNumberOfNights': '1125' 28 } 29 { 30 'lastScrapedDate': '2019-02-11', 31 'propertyName': 'Hospede-se com acesso fácil.', 32 'propertyType': 'Condominium', 33 'accommodatesNumber': '4', 34 'maximumNumberOfNights': '1125' 35 }
python date-number-to-string-query.py
1 { 2 'lastScrapedDate': '2019-02-11', 3 'propertyName': '2017 , férias no Rio', 4 'propertyType': 'House', 5 'accommodatesNumber': '2', 6 'maximumNumberOfNights': '30' 7 } 8 { 9 'lastScrapedDate': '2019-03-07', 10 'propertyName': 'Newly renovated home', 11 'propertyType': 'House', 12 'accommodatesNumber': '2', 13 'maximumNumberOfNights': '30' 14 } 15 { 16 'lastScrapedDate': '2019-02-18', 17 'propertyName': 'Vintage House For Rent', 18 'propertyType': 'House', 19 'accommodatesNumber': '2', 20 'maximumNumberOfNights': '30' 21 } 22 { 23 'lastScrapedDate': '2019-02-18', 24 'propertyName': '4floor house in Taksim,Taksimde 4katli müstakil ev', 25 'propertyType': 'House', 26 'accommodatesNumber': '2', 27 'maximumNumberOfNights': '30' 28 } 29 { 30 'lastScrapedDate': '2019-02-16', 31 'propertyName': '22 Oporto Guesthouse Cordoaria', 32 'propertyType': 'House', 33 'accommodatesNumber': '2', 34 'maximumNumberOfNights': '30' 35 }
python date-number-to-string-query.py
1 { 2 'lastScrapedDate': '2019-02-11', 3 'propertyName': 'Horto flat with small garden', 4 'propertyType': 'Apartment', 5 'accommodatesNumber': '4', 6 'maximumNumberOfNights': '1125' 7 } 8 { 9 'lastScrapedDate': '2019-03-06', 10 'propertyName': 'Private Room in Bushwick', 11 'propertyType': 'Apartment', 12 'accommodatesNumber': '1', 13 'maximumNumberOfNights': '1125' 14 } 15 { 16 'lastScrapedDate': '2019-02-11', 17 'propertyName': 'Apt Linda Vista Lagoa - Rio', 18 'propertyType': 'Apartment', 19 'accommodatesNumber': '2', 20 'maximumNumberOfNights': '1125' 21 } 22 { 23 'lastScrapedDate': '2019-02-18', 24 'propertyName': 'Charming Flat in Downtown Moda', 25 'propertyType': 'House', 26 'accommodatesNumber': '6', 27 'maximumNumberOfNights': '1125' 28 } 29 { 30 'lastScrapedDate': '2019-02-11', 31 'propertyName': "Catete's Colonial Big Hause Room B", 32 'propertyType': 'House', 33 'accommodatesNumber': '8', 34 'maximumNumberOfNights': '1125' 35 }
python date-number-to-string-query.py
1 { 2 'lastScrapedDate': '2019-03-06', 3 'propertyName': 'Ocean View Waikiki Marina w/prkg', 4 'propertyType': 'Condominium', 5 'accommodatesNumber': '2', 6 'maximumNumberOfNights': '365' 7 } 8 { 9 'lastScrapedDate': '2019-03-07', 10 'propertyName': 'New York City - Upper West Side Apt', 11 'propertyType': 'Apartment', 12 'accommodatesNumber': '2', 13 'maximumNumberOfNights': '360' 14 } 15 { 16 'lastScrapedDate': '2019-03-07', 17 'propertyName': 'Sydney Hyde Park City Apartment (checkin from 6am)', 18 'propertyType': 'Apartment', 19 'accommodatesNumber': '2', 20 'maximumNumberOfNights': '30' 21 } 22 { 23 'lastScrapedDate': '2019-03-07', 24 'propertyName': 'Private Room (2) in Guest House at Coogee Beach', 25 'propertyType': 'House', 26 'accommodatesNumber': '2', 27 'maximumNumberOfNights': '365' 28 } 29 { 30 'lastScrapedDate': '2019-03-06', 31 'propertyName': '~Ao Lele~ Flying Cloud', 32 'propertyType': 'Treehouse', 33 'accommodatesNumber': '2', 34 'maximumNumberOfNights': '30' 35 }