Docs Menu
Docs Home
/
MongoDB Atlas
/ /

日付フィールドおよび数値フィールドに対して Atlas Search string クエリを実行する方法

項目一覧

  • コレクションでのマテリアライズドビューの作成
  • マテリアライズドビューのフィールドに Atlas Search インデックスを作成する
  • 変換されたフィールドでのテキスト検索の実行

このチュートリアルでは、 sample_airbnb.listingsAndReviewsコレクション内の stringdate 、およびnumberフィールドに対して Atlas Search クエリを実行する方法について説明します。 数値フィールド値と日付フィールド値を string として保存するマテリアライズドビューを作成します。 Atlas Search次に、マテリアライズドビューに インデックスを作成し、string queryString オートコンプリート 演算子を使用してこれらの フィールドに対してクエリを実行します。このチュートリアルでは、次の手順について説明します。

  1. sample_airbnb.listingsAndReviewsコレクションのnameproperty_typelast_scraped 、およびaccomodatesフィールドにマテリアライズドビューを作成します。

  2. マテリアライズドビューで動的および静的な Atlas Search インデックスを設定します。

  3. queryString演算子とオートコンプリート演算子を使用して、マテリアライズドビューのフィールドに対して Atlas Search クエリを実行し、プロパティを検索します。

開始する前に、Atlas クラスターが前提条件 に記載されている要件を満たしていることを確認してください。

Atlas Search インデックスを作成するには、プロジェクトに対するProject Data Access Admin以上のアクセス権が必要です。

このセクションでは、 airbnb_listingsAndReviewsコレクションのnameproperty_typelast_scrapedaccomodates 、およびmaximum_nightsフィールドに対してairbnb-mat-viewという名前のマテリアライズドビューを作成します。 マテリアライズドビューを使用すると、ソースコレクション内の数値フィールドと日付フィールドを取得し、マテリアライズドビューにstringフィールドとして保存できます。

1

ターミナル ウィンドウでmongoshを開き、クラスターに接続します。 接続の詳細な手順については、「 mongosh経由での接続 」を参照してください。

2
  1. 次のコマンドを実行して、データベースがクラスターに存在することを確認します。

    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
  2. 次のコマンドを実行して、 sample_airbnbデータベースに切り替えます。

    use sample_airbnb
    switched to db sample_airbnb
3

マテリアライズドビューを作成するには、以下のクエリを実行します。 クエリでは、次の集計パイプライン ステージを指定します。

  • $project: このステージでは、クエリは次の処理を実行します。

    • $dateToString を使用して、 last_scraped日付オブジェクトをYYYY-MM-DD形式の string に変換します

    • nameおよびproperty_type string フィールドが含まれます。

    • $toStringを使用してaccomodates数値フィールドを string に変換します。

    • $toStringを使用してmaximum_nights数値フィールドを string に変換します。

  • $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" } }
    ] )
4

確認するには、次のコマンドを実行します。

db.airbnb_mat_view.findOne()
{
_id: '10006546',
lastScrapedDate: '2019-02-16',
propertyName: 'Ribeira Charming Duplex',
propertyType: 'House',
accommodatesNumber: '8',
maximumNumberOfNights: '30'
}

このセクションでは、 lastScrapedDatenamepropertyTypeaccommodatesNumbermaximumNumberOfNightsフィールドに Atlas Search インデックスを作成し、これらのフィールドに対してクエリを実行します。

1
  1. まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー

  2. まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。

  3. Clusters ページがまだ表示されていない場合は、サイドバーの Database をクリックします。

    [ Clusters (クラスター) ] ページが表示されます。

2

GoAtlas Searchページには、サイドバー、Data Explorer 、またはクラスターの詳細ページから できます。

  1. サイドバーで、 Services見出しの下のAtlas Searchをクリックします。

  2. [ Select data sourceドロップダウンからクラスターを選択し、[ Go to Atlas Search ] をクリックします。

    Atlas Searchページが表示されます。

  1. クラスターの [Browse Collections] ボタンをクリックします。

  2. データベースを展開し、コレクションを選択します。

  3. コレクションのSearch Indexesタブをクリックします。

    Atlas Searchページが表示されます。

  1. クラスタの名前をクリックします。

  2. [Atlas Search] タブをクリックします。

    Atlas Searchページが表示されます。

3
4
  • ガイドを利用する場合は、 Visual Editorを選択します。

  • Raw インデックス定義を編集するには、 JSON Editorを選択します。

5
  1. Index Nameフィールドにdate-number-fields-tutorialと入力します。

    インデックスにdefaultと名付けると、 $searchパイプライン ステージでindexパラメータを指定する必要がなくなります。 インデックスにカスタム名を付ける場合は、 indexパラメータでこの名前を指定する必要があります。

  2. Database and Collectionセクションで、 sample_airbnbデータベースを検索し、 airbnb_mat_viewコレクションを選択します。

6

次のいずれかのインデックスを作成できます。

  • queryString演算子を使用してクエリを実行するための 動的マッピング を使用するインデックス。 インデックス定義で 動的マッピング のみを使用する場合は、オートコンプリート演算子を使用してクエリを実行することはできません。

  • オートコンプリート演算子を使用して実行中のクエリに静的マッピングを使用するインデックス。 タイプautocompleteとしてインデックス付けされたフィールドに対してqueryString演算子を使用するクエリは実行できません。

Atlas userインターフェースで Visual Editor または JSON Editor を使用してインデックスを作成できます。

  1. [Next] をクリックします。

  2. [Create Search Index] をクリックします。

  1. インデックスの定義を確認します。

    インデックス定義は、次のようになります。

    {
    "mappings": {
    "dynamic": true
    }
    }
  2. [Next] をクリックします。

  3. [Create Search Index] をクリックします。

Atlas userインターフェースで Visual Editor または JSON Editor を使用してインデックスを作成できます。

  1. クリック Next

  2. [Refine Your Index] をクリックします。

  3. Field Mappings セクションで [Add Field] をクリックします。

  4. Add Field MappingウィンドウでCustomized Configurationをクリックします。

  5. Field NameドロップダウンからaccommodatesNumberを選択します。

  6. [ 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の値が非常に低い場合、インデックスが非常に大きくなる可能性があります。

  7. [ Addをクリックして、 Field Mappingsテーブルにフィールドを追加します。

  8. Field MappingsセクションでAdd Fieldをクリックし、ステップdからステップfを繰り返して、次のフィールドの設定を構成します。

    • lastScrapedDate

    • numberOfNights

  9. [Save Changes] をクリックします。

  1. デフォルトのインデックス定義を、以下の例のインデックス定義に置き換えます。

    {
    "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"
    }
    ]
    }
    }
    }
  2. [Next] をクリックします。

7

[ You're All Set!モーダル ウィンドウは を表示し、Atlas Search がインデックスを作成していることを示します。

8

string に変換された数値フィールドと日付フィールドに対してクエリを実行できます。 このチュートリアルでは、 queryStringオートコンプリート演算子を使用してプロパティを検索します。 クエリは、次のパイプライン ステージを使用します。

  • $search コレクションを検索するステージ

  • 出力を5の結果に制限する$limitステージ

  • $project 除外するステージ _id

このセクションでは、Atlas クラスターに接続し、 airbnb_mat_viewコレクションのフィールドに対して 演算子を使用してサンプル クエリを実行します。

注意

マテリアライズドビューで文字列に変換された日付および数値フィールドに対して、近くのクエリまたは範囲のクエリを実行することはできません。


➤ このページの [言語の選択] ドロップダウンメニューを使用して、このセクションの例の言語を設定します。


1

ターミナル ウィンドウでmongoshを開き、クラスターに接続します。 接続の詳細な手順については、「 mongosh経由での接続 」を参照してください。

2

mongoshプロンプトで次のコマンドを実行します。

use sample_airbnb
switched to db sample_airbnb
3

動的マッピングを使用するインデックスを作成した場合は、 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

次のクエリでは、プロパティ タイプがHouse2人に対応している、 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'
}
]
1

MongoDB Compass を開き、クラスターに接続します。 接続の詳細な手順については、「 Compass 経由での接続 」を参照してください。

2

Database画面で、 sample_airbnbデータベースをクリックし、 airbnb_mat_viewコレクションをクリックします。

3

動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_viewコレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_viewコレクションをクエリできます。

次のクエリは、プロパティ タイプがApartmentまたはCondominiumで、 2人に受け入れられ、 2019にリストされているプロパティを検索します。

パイプラインステージ
クエリ
$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
}

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

次のクエリでは、プロパティ タイプがHouse2人に対応している、 2019にリストされている、または最大30配列のプロパティを検索します。

パイプラインステージ
クエリ
$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
}

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から開始される日数の継続を許可します。

パイプラインステージ
クエリ
$search
{
"index": "date-number-fields-tutorial",
"compound": {
"should": [{
"autocomplete": {
"path": "lastScrapedDate",
"query": "2"
}
},
{
"autocomplete": {
"path": "maximumNumberOfNights",
"query": "1"
}
}]
}
}
$limit
{
5
}
$project
{
"_id": 0
}

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以降の人数を受け入れられるプロパティを検索します。

パイプラインステージ
クエリ
$search
{
"index": "date-number-fields-tutorial",
"compound": {
"should": [{
"autocomplete": {
"path": "maximumNumberOfNights",
"query": "3"
}
},
{
"autocomplete": {
"path": "accommodatesNumber",
"query": "2"
}
}]
}
}
$limit
{
5
}
$project
{
"_id": 0
}

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]
1
mkdir date-number-to-string-query
cd date-number-to-string-query
dotnet new console
2
dotnet add package MongoDB.Driver
3

動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_viewコレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_viewコレクションをクエリできます。

このコード例では、次のタスクを実行します。

  • mongodb パッケージと依存関係をインポートします。

  • Atlas クラスターへの接続を確立します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

次のクエリは、プロパティ タイプがApartmentまたはCondominiumで、 2人に受け入れられ、 2019にリストされているプロパティを検索します。

1using MongoDB.Bson;
2using MongoDB.Bson.Serialization.Attributes;
3using MongoDB.Bson.Serialization.Conventions;
4using MongoDB.Driver;
5using MongoDB.Driver.Search;
6
7public 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[BsonIgnoreExtraElements]
43public class matViewDocument
44{
45 [BsonIgnoreIfDefault]
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にデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

次のクエリでは、プロパティ タイプがHouse2人に対応している、 2019にリストされている、または最大30配列のプロパティを検索します。

1using MongoDB.Bson;
2using MongoDB.Bson.Serialization.Attributes;
3using MongoDB.Bson.Serialization.Conventions;
4using MongoDB.Driver;
5using MongoDB.Driver.Search;
6
7public 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[BsonIgnoreExtraElements]
43public class matViewDocument
44{
45 [BsonIgnoreIfDefault]
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から開始される日数の継続を許可します。

1using MongoDB.Bson;
2using MongoDB.Bson.Serialization.Attributes;
3using MongoDB.Bson.Serialization.Conventions;
4using MongoDB.Driver;
5using MongoDB.Driver.Search;
6
7public 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[BsonIgnoreExtraElements]
42public class matViewDocument
43{
44 [BsonIgnoreIfDefault]
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以降の人数を受け入れられるプロパティを検索します。

1using MongoDB.Bson;
2using MongoDB.Bson.Serialization.Attributes;
3using MongoDB.Bson.Serialization.Conventions;
4using MongoDB.Driver;
5using MongoDB.Driver.Search;
6
7public 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[BsonIgnoreExtraElements]
42public class matViewDocument
43{
44 [BsonIgnoreIfDefault]
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にデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

4
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}
1
2

動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_viewコレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_viewコレクションをクエリできます。

次のクエリは、プロパティ タイプがApartmentまたはCondominiumで、 2人に受け入れられ、 2019にリストされているプロパティを検索します。

1package main
2
3import (
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
13func 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にデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

次のクエリでは、プロパティ タイプがHouse2人に対応している、 2019にリストされている、または最大30配列のプロパティを検索します。

1package main
2
3import (
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
13func 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から開始される日数の継続を許可します。

1package main
2
3import (
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
14type MovieCollection struct {
15 title string `bson:"Title,omitempty"`
16}
17
18func 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以降の人数を受け入れられるプロパティを検索します。

1package main
2
3import (
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
14type MovieCollection struct {
15 title string `bson:"Title,omitempty"`
16}
17
18func 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にデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

3
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]
1
junit
4.11以降のバージョン
mongodb-driver-sync
4.3.0以降のバージョン
slf4j-log4j12
1.7.30以降のバージョン
2
3

動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_viewコレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_viewコレクションをクエリできます。

このコード例では、次のタスクを実行します。

  • mongodb パッケージと依存関係をインポートします。

  • Atlas クラスターへの接続を確立します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

注意

Maven 環境でサンプル コードを実行するには、 ファイルのインポート ステートメントの上に以下を追加します。

package com.mongodb.drivers;

次のクエリは、プロパティ タイプがApartmentまたはCondominiumで、 2人に受け入れられ、 2019にリストされているプロパティを検索します。

1import java.util.Arrays;
2import static com.mongodb.client.model.Filters.eq;
3import static com.mongodb.client.model.Aggregates.limit;
4import static com.mongodb.client.model.Aggregates.project;
5import static com.mongodb.client.model.Projections.excludeId;
6import static com.mongodb.client.model.Projections.fields;
7import com.mongodb.client.MongoClient;
8import com.mongodb.client.MongoClients;
9import com.mongodb.client.MongoCollection;
10import com.mongodb.client.MongoDatabase;
11import org.bson.Document;
12
13public 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にデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

次のクエリでは、プロパティ タイプがHouse2人に対応している、 2019にリストされている、または最大30配列のプロパティを検索します。

1import java.util.Arrays;
2import static com.mongodb.client.model.Filters.eq;
3import static com.mongodb.client.model.Aggregates.limit;
4import static com.mongodb.client.model.Aggregates.project;
5import static com.mongodb.client.model.Projections.excludeId;
6import static com.mongodb.client.model.Projections.fields;
7import com.mongodb.client.MongoClient;
8import com.mongodb.client.MongoClients;
9import com.mongodb.client.MongoCollection;
10import com.mongodb.client.MongoDatabase;
11import org.bson.Document;
12
13public 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から開始される日数の継続を許可します。

1import java.util.Arrays;
2import static com.mongodb.client.model.Filters.eq;
3import static com.mongodb.client.model.Aggregates.limit;
4import static com.mongodb.client.model.Aggregates.project;
5import static com.mongodb.client.model.Projections.excludeId;
6import static com.mongodb.client.model.Projections.fields;
7import com.mongodb.client.MongoClient;
8import com.mongodb.client.MongoClients;
9import com.mongodb.client.MongoCollection;
10import com.mongodb.client.MongoDatabase;
11import org.bson.Document;
12
13public 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以降の人数を受け入れられるプロパティを検索します。

1import java.util.Arrays;
2import static com.mongodb.client.model.Filters.eq;
3import static com.mongodb.client.model.Aggregates.limit;
4import static com.mongodb.client.model.Aggregates.project;
5import static com.mongodb.client.model.Projections.excludeId;
6import static com.mongodb.client.model.Projections.fields;
7import com.mongodb.client.MongoClient;
8import com.mongodb.client.MongoClients;
9import com.mongodb.client.MongoCollection;
10import com.mongodb.client.MongoDatabase;
11import org.bson.Document;
12
13public 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にデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

4
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}
1
mongodb-driver-kotlin-coroutine
4.10.0以降のバージョン
2
3

動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_viewコレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_viewコレクションをクエリできます。

このコード例では、次のタスクを実行します。

  • mongodb パッケージと依存関係をインポートします。

  • Atlas クラスターへの接続を確立します。

  • クエリに一致するドキュメントをAggregateFlowインスタンスから出力します。

次のクエリは、プロパティ タイプがApartmentまたはCondominiumで、 2人に受け入れられ、 2019にリストされているプロパティを検索します。

1import com.mongodb.client.model.Aggregates.limit
2import com.mongodb.client.model.Aggregates.project
3import com.mongodb.client.model.Projections.*
4import com.mongodb.kotlin.client.coroutine.MongoClient
5import kotlinx.coroutines.runBlocking
6import org.bson.Document
7
8fun 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にデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

次のクエリでは、プロパティ タイプがHouse2人に対応している、 2019にリストされている、または最大30配列のプロパティを検索します。

1import com.mongodb.client.model.Aggregates.limit
2import com.mongodb.client.model.Aggregates.project
3import com.mongodb.client.model.Projections.excludeId
4import com.mongodb.client.model.Projections.fields
5import com.mongodb.kotlin.client.coroutine.MongoClient
6import kotlinx.coroutines.runBlocking
7import org.bson.Document
8
9fun 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から開始される日数の継続を許可します。

1import com.mongodb.client.model.Aggregates.limit
2import com.mongodb.client.model.Aggregates.project
3import com.mongodb.client.model.Projections.*
4import com.mongodb.kotlin.client.coroutine.MongoClient
5import kotlinx.coroutines.runBlocking
6import org.bson.Document
7
8fun 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以降の人数を受け入れられるプロパティを検索します。

1import com.mongodb.client.model.Aggregates.limit
2import com.mongodb.client.model.Aggregates.project
3import com.mongodb.client.model.Projections.*
4import com.mongodb.kotlin.client.coroutine.MongoClient
5import kotlinx.coroutines.runBlocking
6import org.bson.Document
7
8fun 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にデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

4

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}}
1
2

動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_viewコレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_viewコレクションをクエリできます。

このコード例では、次のタスクを実行します。

  • MongoDB のNode.jsドライバーであるmongodbをインポートします。

  • Atlas クラスターへの接続を確立するための MongoClient クラスのインスタンスを作成します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

次のクエリは、プロパティ タイプがApartmentまたはCondominiumで、 2人に受け入れられ、 2019にリストされているプロパティを検索します。

1const MongoClient = require("mongodb").MongoClient;
2const assert = require("assert");
3
4const 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
22MongoClient.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にデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

次のクエリでは、プロパティ タイプがHouse2人に対応している、 2019にリストされている、または最大30配列のプロパティを検索します。

1const MongoClient = require("mongodb").MongoClient;
2const assert = require("assert");
3
4const 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
22MongoClient.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から開始される日数の継続を許可します。

1const MongoClient = require("mongodb").MongoClient;
2const assert = require("assert");
3
4const 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
33MongoClient.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以降の人数を受け入れられるプロパティを検索します。

1const MongoClient = require("mongodb").MongoClient;
2const assert = require("assert");
3
4const 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
33MongoClient.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
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 }
1
2

動的マッピングを使用するインデックスを作成した場合は、 queryString演算子を使用してairbnb_mat_viewコレクションをクエリできます。 静的マッピングを使用するインデックスを作成した場合は、オートコンプリート演算子を使用してairbnb_mat_viewコレクションをクエリできます。

このコード例では、次のタスクを実行します。

  • pymongo、 MongoDBのPythonドライバー、および DNSシードリスト接続文字列を使用して pymongoAtlas に接続するために必要な dns モジュールをインポートします。

  • Atlas クラスターへの接続を確立するためのMongoClientクラスのインスタンスを作成します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

次のクエリは、プロパティ タイプがApartmentまたはCondominiumで、 2人に受け入れられ、 2019にリストされているプロパティを検索します。

1import pymongo
2import dns
3
4client = pymongo.MongoClient('<connection-string>')
5result = 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
23for i in result:
24 print(i)

サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

次のクエリでは、プロパティ タイプがHouse2人に対応している、 2019にリストされている、または最大30配列のプロパティを検索します。

1import pymongo
2import dns
3
4client = pymongo.MongoClient('<connection-string>')
5result = 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
23for i in result:
24 print(i)

サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

このコード例では、次のタスクを実行します。

  • pymongo、MongoDB の Python ドライバー、およびDNSシード リスト接続文字列を使用してpymongoAtlas に接続するために必要なdns モジュールをインポートします。

  • Atlas クラスターへの接続を確立するためのMongoClientクラスのインスタンスを作成します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

次のクエリは、 2から一時的にリストされたプロパティを検索し、 1から開始される日数の継続を許可します。

1import pymongo
2import dns
3
4client = pymongo.MongoClient('<connection-string>')
5result = 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
34for i in result:
35 print(i)

サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

次のクエリでは、 3から始まる接続数と2以降の人数を受け入れられるプロパティを検索します。

1import pymongo
2import dns
3
4client = pymongo.MongoClient('<connection-string>')
5result = 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
34for i in result:
35 print(i)

サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

3
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}

戻る

日付範囲フィルター