ColdFusion と GCP Firestore

概要

Firestore は、自動スケーリング、高パフォーマンス、および容易なアプリケーション開発用に構築された NoSQL ドキュメントデータベースです。Firestore インターフェイスには、従来のデータベースと同じ機能が数多くありますが、NoSQL データベースは、データオブジェクト間の関係を記述する方法が異なります。ColdFusion には、追加の NoSQL ソリューションとして Firestore が統合されています。

詳しくは、GCP Firestore を参照してください。

ネイティブモードと Datastore モードの比較

Firestore データベースを作成するときには、データベースに Datastore との下位互換性を持たせる Datastore モード、または新しい Firestore 全機能を備えたネイティブモードのいずれかで実行されるように、データベースインスタンスを設定することができます。

ColdFusion ではデータストアの API を使用しているので、API を通じてネイティブモードでの Firestore をサポートしています。

データモデル

Cloud Firestore は、NoSQL のドキュメント指向データベースです。SQL データベースとは異なり、テーブルや行はありません。代わりに、ドキュメントにデータを保存し、ドキュメントをコレクションに編成します。各ドキュメントには一連の Key-Value ペアが含まれています。Cloud Firestore は、小さなドキュメントからなる大きなコレクションを保存するために最適化されています。ドキュメントはすべてコレクションに保存されなければなりません。ドキュメントには、サブコレクションやネストされたオブジェクトを含めることができます。どちらの場合も、文字列のような基本フィールドやリストのような複合オブジェクトを含めることができます。

コレクションとドキュメントは、Cloud Firestore に暗黙的に作成されます。データをコレクション内のドキュメントに割り当てるだけです。コレクションまたはドキュメントが存在しない場合は、Cloud Firestore により作成されます。

Firestore でデータを構造化するには、ドキュメントを作成します。これにより、暗黙的にコレクション(SQL のテーブルなど)が作成されます。これらのコレクションには、SQL の行などのドキュメントが含まれています。各ドキュメントには、実際のデータを含むフィールドが含まれています。ドキュメントのパスを使用してドキュメントを参照することも、目的のデータについてドキュメントのコレクションをクエリすることもできます。

インデックス作成

Firestore では、単一フィールドと複合フィールドの 2 種類のインデックスを使用します。デフォルトでは、Cloud Firestore はドキュメント内の各フィールドとマップ内の各サブフィールドに対して、単一フィールドインデックスを自動的に維持します。単一フィールドのインデックス除外を作成することで、自動インデックス設定からフィールドを除外できます。インデックス除外は、データベース全体の自動インデックス設定より優先されます。除外すると、自動インデックス設定によって本来は無効になる単一フィールドインデックスを有効にしたり、自動インデックスによって本来は有効になる単一フィールドインデックスを無効にできます。

除外が役立つケースについては、インデックス作成のベストプラクティスを参照してください。

はじめに

gcpfirestore パッケージのインストール

gcpfirestore パッケージをインストールするには、ColdFusion Administrator のパッケージマネージャーページを使用するか、以下の手順に従います。

  1. <CF_HOME>/cfusion/bin に移動します。

  2. 次のコマンドを入力します。

    1. Windows:cfpm.bat
    2. Windows 以外の場合:/cfpm.sh
  3. コマンド install gcpfirestore を入力します。

    パッケージがインストールされるまで待ちます。

GCP Firestore にアクセスするための資格情報の取得

GCP を操作する場合、資格情報を検証し、リクエストしているリソースにアクセスするための権限を持っているかどうかをチェックするために、GCP セキュリティ資格情報を指定します。

GCP は、セキュリティ資格情報を使用して、リクエストを認証および承認します。

詳しくは、GCP API キーの概要を参照してください。

GCP サービスの認証

GCP サービスにアクセスするには、Google Cloud コンソールを使用してサービスアカウントを作成します(または、gcloud CLI、REST 呼び出しを使用するか、プログラムで実行することもできます)。このようなアカウントは、Google Cloud の ID およびアクセス管理(IAM)によって管理されています。 

詳しくは、GCP サービスの認証を参照してください。

クラウドサービス資格情報と設定の追加

Adobe ColdFusion(2021 リリース)には、様々なクラウドサービスにアクセスするためのオブジェクトを作成するためにハンドルを提供するメソッド getCloudService() があります。

サービスハンドルのシンタックスを次に示します。

service=getCloudService(cloudCred,cloudConfig)。ここで、

  • cloudCred:クラウドサービスの資格情報を定義します。構造体または文字列です(資格情報エイリアスとも呼ばれます)。
  • cloudConfig:クラウドサービス設定の詳細を定義します。構造体または文字列です(設定エイリアスとも呼ばれます)。

ColdFusion Administrator

資格情報の設定

ColdFusion Administrator で、データとサービス/クラウド資格情報をクリックします。

エイリアスは、クラウドサービスおよびその設定の詳細の名前付き表現です。ColdFusion Administrator を使用して設定エイリアスを設定できます。

詳細を入力したら、「資格情報を追加」をクリックします。

クラウドサービス資格情報の設定

設定オプションの設定

ColdFusion Administrator で、データとサービス/クラウド設定をクリックします。

設定エイリアス、ベンダー、サービスの名前など、次の詳細を入力します。

オブジェクトの作成

GCP 資格情報および設定オプションのエイリアスを作成したら、getCloudService API を使用してオブジェクトを作成し、次のコードを CFM に含めることができます。  

fsObject= getCloudService("fsCred", "fsConf")

注意:

資格情報 JSON ファイル

資格情報 JSON ファイルには、GCP サービスでの認証に役立つプロジェクト ID と秘密鍵が含まれています。project_id を含むすべてのキーはファイル内で必須です。

Application.cfc

GCP 資格情報および設定オプションを記載したファイルを Application.cfc で指定できます。次に例を示します。

component{
    this.name =&quot;FireStore_Test&quot;
    this.serialization.preservecaseforstructkey=true
    this.enableNullSupport=true
    void function onApplicationStart(){
    application.gcpCred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;C:\path\Gcp_Firestore\my-gcp-project-250541665619.json&quot;
    };
    application.gcpConf = {
        serviceName : &quot;FIRESTORE&quot;
    };
    }
}

オブジェクトを作成します。次のスニペットを参考にしてください。

fsObject = getCloudService(application.fsCred, application.fsConf)

CFM ページ上

CFM ページでは、以下に示す 4 とおりの方法のいずれかで GCP 資格情報および設定オプションを指定できます。

資格情報および設定エイリアス

GCP 資格情報および設定オプション用のエイリアスを作成したら、次に示すように、getCloudService ハンドルでそれらのエイリアスを使用できます。

<cfscript> 
  // ColdFusion Administrator で資格情報エイリアスと設定エイリアスを定義 
  fsObject=getCloudService(&quot;fsCred&quot;,&quot;fsConf&quot;) 
  // 以下にコードを記述
  ...........</cfscript>

資格情報エイリアスと構造体

<cfscript> 
    // サービス設定に資格情報エイリアスと構造体を使用 
    fsConf = { 
            &quot;alias&quot;:&quot;gcpConf&quot;, 
            &quot;serviceName&quot; : &quot;GCP_STORAGE&quot;, 
            &quot;clientOverrideConfig&quot;:{ 
                &quot;retryPolicy&quot;:{ 
                  &quot;numRetries&quot;:4 
                } 
            }, 
            &quot;httpClientConfig&quot;:{ 
                &quot;maxConnections&quot;:50 
            } 
   
    } 
    fsObject= getCloudService(&quot;fsCred&quot;, fsConf) 
   
    // 以下にコードを記述 
    .....................</cfscript>

設定エイリアスと構造体

<cfscript> 
    // サービス設定に設定エイリアスと構造体を使用 
    // GCP 資格情報 
    fsCreds={ 
      &quot;vendorName&quot;:&quot;GCP&quot;, 
      &quot;alias&quot;: &quot;fsCred&quot;, 
      &quot;projectId&quot;:&quot;1234&quot;, 
      &quot; credentialJsonFilePath &quot;: &quot;file path&quot;
    } 
    fsObject= getCloudService(fsCreds, &quot;fsConf&quot;) 
    // 以下にコードを記述 
    .....................................</cfscript>

資格情報構造体と設定構造体

<cfscript> 
  // クラウド資格情報と設定の両方に構造体を使用 
 fsCreds={ 
      &quot;vendorName&quot;:&quot;GCP&quot;, 
      &quot;alias&quot;: &quot;fsCred&quot;, 
      &quot;projectId&quot;:&quot;1234&quot;, 
      &quot; credentialJsonFilePath &quot;: &quot;file path&quot;
    }
    fsConf = { 
            &quot;alias&quot;:&quot;fsConf&quot;, 
            &quot;serviceName&quot; : &quot;firestore&quot;, 
            &quot;clientOverrideConfig&quot;:{ 
                &quot;retryPolicy&quot;:{ 
                  &quot;numRetries&quot;:4 
                } 
            }, 
            &quot;httpClientConfig&quot;:{ 
                &quot;maxConnections&quot;:50 
            } 
      }
  fsObject= getCloudService(fsCreds, fsConf) 
   
  // 以下にコードを記述
  ...................................................................</cfscript>

CFSetup

クラウド資格情報

Add

  • add cloudcredential alias=FirestoreCred credentialJSONFilePath=<location to cred.json> projectId=proj-id vendorName=GCP

Set

  • set cloudcredential firestoreCred projectId=proj-id

Get

  • get cloudcredential firestoreCred credentialJSONFilePath

Show

  • show cloudcredential firestoreCred

Export

  • export cloudcredential ccd.json

Delete

  • delete cloudcredential firestoreCred

Import

  • import cloudcredential ccd.json

クラウド設定

Add

  • add cloudconfiguration alias=firestore1 keepAliveTime=1m keepAliveTimeout=30s keepAliveWithoutCalls=YES maxInboundMessageSize=10 databaseId=(default) emulatorHost=127.0.0.1:8500 host=firestore.googleapis.com:443 initialRetryDelay=1s initialRpcTimeout=50s maxAttempts=6 maxRetryDelay=32s maxRpcTimeout=50s retryDelayMultiplier=2 rpcTimeoutMultiplier=1 totalTimeout=50s serviceName=FIRESTORE

Set

  • set cloudconfiguration firestore1 keepAliveTime=2m keepAliveTimeout=1m keepAliveWithoutCalls=NO

Get

  • get cloudconfiguration firestore1 keepAliveTime keepAliveTimeout keepAliveWithoutCalls

Show

  • show cloudconfiguration firestore1

Delete

  • delete cloudconfiguration firestore1

Export

  • export cloudconfiguration ccf.json

Import

  • import cloudconfiguration ccf.json

ColdFusion GCP Firestore API

Firestore の API は、管理 API を除いて非同期です。ColdFusion は、同期結果を提供するのではなく、組み込みの Future を使用します。

コレクション

説明

指定したパスにあるコレクションを参照する CollectionReference を取得します。

シンタックス
firestoreHandle.collection(String path)

パラメーター

  • Path:指定されたパスのコレクション。

戻り値

コレクションへの参照。

次に例を示します。

<cfscript>cred = {
projectId: &quot;my-gcp-project&quot;,
        Vendor: &quot;GCP&quot;、
credentialJsonFilePath: &quot;File-path-cred. json&quot;
};
conf = {
serviceName: &quot;firestore&quot;
};
   
    db=getCloudService(cred, conf)
    // ドキュメントを作成
    docData = ${
        name: &quot;Bangalore&quot;,
state: &quot;KA&quot;,
country: &quot;INDIA&quot;
    }
    // ドキュメントをコレクションに追加
    res = db.collection(&quot;cities_D&quot;).runQuery().get();
    // ドキュメントを取得
    writeOutput(ArrayLen(res.getDocuments()))
</cfscript>

コレクショングループ

説明

指定された ID を持つコレクションまたはサブコレクションに含まれる、データベース内のすべてのドキュメントを含むコレクショングループへの参照を作成して返します。

シンタックス

FirestoreHandle.collectionGroup(String id)

戻り値

コレクショングループへの参照。

例、

<cfscript>cred = {
projectId: &quot;my-gcp-project&quot;,
        Vendor: &quot;GCP&quot;、
credentialJsonFilePath: &quot;File-path-cred. json&quot;
};
conf = {
serviceName: &quot;firestore&quot;
};
   
    db=getCloudService(cred, conf)
    // 指定された ID を持つコレクションまたはサブコレクションに含まれる、データベース内のすべてのドキュメントを含む新しい CollectionGroup を作成して返す
    reviews=db.collectionGroup(&quot;reviews&quot;)
    query=reviews.whereEqualTo(&quot;author&quot;,&quot;ravi&quot;)
    results = query.runQuery().get()
    writeDump(results)
</cfscript>

コレクションのリスト表示

データベース内のすべてのコレクションを一覧表示します。

シンタックス

firestoreHandle.listCollections()

戻り値

ドキュメント内のコレクションの参照

次に例を示します。

<cfscript>cred = {
projectId: &quot;my-gcp-project&quot;,
        Vendor: &quot;GCP&quot;、
credentialJsonFilePath: &quot;File-path-cred. json&quot;
};
conf = {
serviceName: &quot;firestore&quot;
};
   
    db=getCloudService(cred, conf)
    // データベース内のすべてのコレクションのリストを取得
    collections=db.listCollections()
    // コレクションの数を取得
    writeOutput(collections.size())
</cfscript>

すべてのドキュメントの取得

Firestore から複数のドキュメントを取得します。また、必要に応じてフィールドマスクを適用すると、伝送されるデータ量を減らすこともできます。

シンタックス

firestoreHandle.getAll(Array paths,Array masks)

次に例を示します。

<cfscript>cred = {
projectId: &quot;my-gcp-project&quot;,
        Vendor: &quot;GCP&quot;、
credentialJsonFilePath: &quot;File-path-cred. json&quot;
};
conf = {
serviceName: &quot;firestore&quot;
};
   
    db=getCloudService(cred, conf)
    gettAllData=db.getAll([db.document(&quot;Restaurants_D/restaurant1&quot;), db.document(&quot;Restaurants_D/restaurant3&quot;)], [&quot;LOCATION&quot;, &quot;NAME&quot;]).get()
    cfloop(array=&quot;#gettAllData#&quot;, item=&quot;itm&quot;)
{
cfloop(collection = &quot;#itm.getData()#&quot;,item = &quot;key&quot;)
{  
    writeOutput(key);
writeOutput(&quot; &quot;);
writeOutput(itm.getData()[key]);
writeOutput(&quot; &quot;);
}
}
</cfscript>

作成および更新

ドキュメント

指定したパスにあるドキュメントを参照する DocumentReference を取得します。 

シンタックス

FirestoreHandle.document(String id)   

戻り値

ドキュメントへの参照。

次に例を示します。

<cfscript>cred = {
projectId: &quot;my-gcp-project&quot;,
        Vendor: &quot;GCP&quot;、
credentialJsonFilePath: &quot;File-path-cred. json&quot;
};
conf = {
serviceName: &quot;firestore&quot;
};
   
    db=getCloudService(cred, conf)
    docRef = db.collection(&quot;Ecom_D&quot;).document(&quot;Order2&quot;);
docData = ${
OrderID: 1002233,
ItemID: 00001,
Price: 499.00,
Seller: &quot;ABC&quot;		
    }
docRef.set(docData).get()
    writeOutput(docRef.getDocument().get().getID())
//writeOutput(docRef.getDocument().get())
</cfscript>

新規ドキュメントの追加

説明

Firestore によって生成された一意のドキュメント ID を使用して、新しいドキュメントをコレクションに追加します。

シンタックス

add(struct data)

パラメーター

  • Data:ドキュメントに追加するデータ。

戻り値

ドキュメントが追加されたときの未来のタイムスタンプ。

次に例を示します。

<cfscript>
    cred = {
projectId : &quot;my-project-id&quot;,
credentialJsonFilePath : &quot;Path-creds-file.json&quot;
};
conf = {
serviceName : &quot;firestore&quot;
};
    db=getCloudService(cred,conf)
    docData=${
    firstName: &quot;Jack&quot;,
    lastName: &quot;Sparrow&quot;,
    age2: #Int(22)#,
    arrMarks: [89,90,91,92],
    percentage: 90.54,
    isPass: True,
    feeDue: &quot;Null&quot;
    }
    // データを追加
    response=db.collection(&quot;Student_D&quot;).add(docData).get()
    writeDump(response)
</cfscript>

オブジェクトの追加

説明

指定したオブジェクトを使用して、新しいドキュメントをコレクションに追加します。

シンタックス

add(cfobject data)

パラメーター

  • Data:ドキュメントに追加するオブジェクト。

戻り値

ドキュメントが追加されたときの未来のタイムスタンプ。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-project-id&quot;,
        credentialJsonFilePath : &quot;Path-creds-file.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    objPerson = new testFiles.
_Person(&quot;Jack&quot;, &quot;Sparrow&quot;, 8989898989);
    response=db.collection(&quot;Users_D&quot;).add(objPerson).get()
    writeDump(response)
</cfscript>_Person(&quot;Jack&quot;, &quot;Sparrow&quot;, 8989898989);
    response=db.collection(&quot;Users_D&quot;).add(objPerson).get()
    writeDump(response)
</cfscript>

ドキュメントの作成

説明

指定された場所にドキュメントを作成します。ドキュメントが既に存在している場合、作成は失敗します。

シンタックス

create(Struct data)

パラメーター

  • Data:作成するドキュメントに追加するデータ。

戻り値

ドキュメントが作成されたときの未来のタイムスタンプ。

次に例を示します。

<cfscript>
    cred = {
projectId : &quot;my-project-id&quot;,
credentialJsonFilePath : &quot;Path-creds-file.json&quot;
};
conf = {
serviceName : &quot;firestore&quot;
};
    db=getCloudService(cred,conf)
    docSchool2=${
        name:&quot;NYU&quot;,
        location:&quot;NY&quot;,
        year:2010
    }
    try{
        createResponse=db.collection(&quot;Coll_Doc_2&quot;).document(&quot;doc_Doc_2&quot;).create(docSchool2).get()
        writeOutput(&quot;Document created successfully&quot;)
        writeDump(createResponse)
    }
    catch(any e){
        writeDump(e)
    }
</cfscript>

複数のドキュメントの取得

シンタックス

getAll(Array documentReferences)

パラメーター

  • DocumentReferences:ドキュメントの配列。

戻り値

ドキュメントのスナップショットの未来の配列。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-project-id&quot;,
        vendorName: &quot;GCP&quot;,
        credentialJsonFilePath : &quot;Path-creds-file.json&quot;
    };
    conf = {
        serviceName: &quot;firestore&quot;
    };
    db=getCloudService(cred, conf)
    docRef1 = db.collection(&quot;Cities_s&quot;).document(&quot;SF15&quot;);
    docRef2 = db.collection(&quot;Cities_s&quot;).document(&quot;SF16&quot;);

    docData = ${
        Country: &quot;USA&quot;,
        Population: 901
    }
    docData1 = ${
        Country: &quot;USA&quot;,
        Population: 902
    }
    docRef1.set(docData).get();
    docRef2.set(docData1).get();
       returnValue = db.runTransaction(transaction => {
            try {
        getAllFuture=transaction.getAll([docRef1, docRef2], [&quot;Population&quot;]).get();
        cfloop(array=&quot;#getAllFuture#&quot;, item=&quot;itm&quot;)
    {
   cfloop(collection = &quot;#itm.getData()#&quot;,item = &quot;key&quot;);
   {
        if(itm.getData()[&quot;Population&quot;] > 900)
      transaction.update(db.document(itm.getPath()), {&quot;Population&quot; : itm.getData()[&quot;Population&quot;]+1});
    }
  }
    return transaction;
            }
            catch (any e)
            { return e; }
        }).get();
</cfscript>

オブジェクトデータを使用したドキュメントの作成

説明

指定されたオブジェクトを使用して、指定した場所にドキュメントを作成します。ドキュメントが既に存在している場合、作成は失敗します。

シンタックス

create(cfobject data)

パラメーター

  • Data:作成するドキュメントに追加するオブジェクト。

戻り値

ドキュメントが作成されたときの未来のタイムスタンプ。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-project-id&quot;,
        credentialJsonFilePath : &quot;Path-creds-file.json&quot;
    };
    conf = {
       serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    db = getCloudService(this.cred, this.conf);
    objPerson1 = new testFiles.
_Person(&quot;Jack&quot;, &quot;Sparrow&quot;, 9090909090);
    response=db.collection(&quot;Users_D&quot;).document().create(objPerson1).get()
    writeDump(response)
</cfscript>_Person(&quot;Jack&quot;, &quot;Sparrow&quot;, 9090909090);
    response=db.collection(&quot;Users_D&quot;).document().create(objPerson1).get()
    writeDump(response)
</cfscript>

ドキュメントの上書き

説明

指定した場所にあるドキュメントが上書きされます。ドキュメントが存在しない場合は、ドキュメントが作成されます。ドキュメントが既に存在している場合は、上書きされます。

シンタックス

set(Struct data)

パラメーター

  • Data:アップデートするドキュメントに追加するデータ。

戻り値

ドキュメントが編集されたときの未来のタイムスタンプ。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-project-id&quot;,
        credentialJsonFilePath : &quot;Path-creds-file.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    for (i = 1; i <= 5; i++) {
    docData = ${
        name: &quot;Chicago&quot;&i,
        state: &quot;IL&quot;&i,
        country: &quot;USA&quot;&i
    }
    response=db.collection(&quot;cities_D&quot;).document(i).set(docData); //Updating the document
    writeDump(response)
    }
</cfscript>

オブジェクトデータを使用したドキュメントの上書き

説明

指定されたオブジェクトを使用して、指定した場所にあるドキュメントを上書きします。ドキュメントが存在しない場合は、ドキュメントが作成されます。ドキュメントが既に存在している場合は、上書きされます。

シンタックス

set(cfobject data)

パラメーター

  • Data:アップデートするドキュメントに追加するオブジェクト。

戻り値

ドキュメントが編集されたときの未来のタイムスタンプ。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-project-id&quot;,
        credentialJsonFilePath : &quot;Path-creds-file.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    objPerson = new testFiles.
_Person(&quot;Jack&quot;, &quot;Sparrow&quot;, 8989898989);
    response=db.collection(&quot;Users_D&quot;).add(objPerson).get()
    writeDump(response)
</cfscript>_Person(&quot;Joy&quot;, &quot;Division&quot;, 8989898989);
    future = runAsync(x => db.collection(&quot;Users_D&quot;).document(&quot;D1&quot;).set(objPerson).get())
    writeDump(future)
</cfscript>

ドキュメントフィールドの更新

説明

その場所にあるドキュメントのフィールドが更新されます。

シンタックス

update(Struct fields)

パラメーター

  • Fields:ドキュメント内の既存のフィールドを置き換える構造体。

戻り値

ドキュメントが更新されたときの未来のタイムスタンプ。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-project-id&quot;,
        credentialJsonFilePath : &quot;Path-creds-file.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    docRef = db.collection(&quot;Cities_D&quot;).document(&quot;SF12&quot;);

    docData = ${
        Country: &quot;USA&quot;,
        Population: 860000
        }
    docData1 = ${
        Country: &quot;USA&quot;,
        Population: 90000
        }
    docRef.set(docData).get();
    createdDate=docRef.getDocument().get().getCreateTime();
    response=docRef.update(docData1,createdDate).get()
    writeDump(response)
</cfscript>

更新

説明

タイムスタンプを使用してドキュメントのフィールドを更新します。

シンタックス

update(Struct fields, dateTime timestamp)

パラメーター

  • Fields:ドキュメント内の既存のフィールドを置き換える構造体。
  • タイムスタンプ:日付に基づいてドキュメントを更新します。

戻り値

ドキュメントが更新されたときの未来のタイムスタンプ。

次に例を示します。

<cfscript>
    	cred = {
            projectId : &quot;my-project-id&quot;,
            credentialJsonFilePath : &quot;Path-creds-file.json&quot;
        };
        conf = {
            serviceName : &quot;firestore&quot;
        };
    	db=getCloudService(cred,conf)

        docRef = db.collection(&quot;Cities_D&quot;).document(&quot;SF12&quot;);		
        docData = ${
            Country: &quot;USA&quot;,
            Population: 860000
        }
        docData1 = ${
            Country: &quot;USA&quot;,
            Population: 90000
        }
        docRef.set(docData).get();
        createdDate=docRef.getDocument().get().getCreateTime();
        docRef.update(docData1,createdDate).get(); //日時の前提条件を使用して更新しようとしています。writeOutput(&quot;Population is updated&quot;)
response=db.document(&quot;Cities_D/SF12&quot;).getDocument().get().getData()[&quot;Population&quot;]);
        writeDump(response)
 </cfscript>

add、set、update、delete の各メソッドでは、Future オブジェクトを戻り値として返します。したがって、ColdFusion の Future 機能を利用できます。以下の例は、チェーンによって呼び出しを処理できる別の方法を示しています。チェーンはワーカースレッドを使用しているため、これらの結果はメイン スレッドとは別のバッファーを使用してファイルに書き込まれます。

次に例を示します。

<cfscript>
    aUser = ${
        firstName: &quot;Harry&quot;,
        lastName: &quot;Potter&quot;,
        age: 14,
        address: &quot;Hogwarts&quot;
    }
    
    harry = db.document(&quot;users/harry&quot;);
    fileHandle = fileOpen(ExpandPath(&quot;./crudDump.txt&quot;), &quot;write&quot;);
    
    harry.set(aUser).then(
        resultFromFirestore => {
            fileappend(fileHandle, resultFromFirestore);
            harry.getDocument()
            .then(result => {
                    fileappend(fileHandle, serialize(result.getData(),&quot;json&quot;));
                }
            ).error(ex => {
                fileappend(fileHandle, ex.getMessage());
            })
        }
    )
    .error(ex => {
        fileappend(fileHandle, ex.getMessage());
    })
</cfscript>

ID の取得

説明

ドキュメントの ID を取得します。

シンタックス

getID()

戻り値

ドキュメント ID を返します。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        vendorName: &quot;GCP&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName: &quot;firestore&quot;
    };
   
    db=getCloudService(cred, conf)
    docRef = db.collection(&quot;Ecom_D&quot;).document(&quot;Order2&quot;);
    docData = ${
        OrderID: 1002233,
        ItemID: 00001,
        Price: 499.00,
        Seller: &quot;ABC&quot;		
    }
    docRef.set(docData).get()
    writeOutput(docRef.getDocument().get().getID())
</cfscript>
    writeOutput (docRef. getDocument (). get () getID ())</cfscript>

パスの取得

説明

ルートのパスを取得します。

シンタックス

getPath()

戻り値

ルートのパス。

次に例を示します。

<cfscript>
    cred = {
projectId : &quot;my-gcp-project&quot;,
        vendorName: &quot;GCP&quot;,
credentialJsonFilePath : &quot;File-path-cred.json&quot;
};
conf = {
serviceName: &quot;firestore&quot;
};
   
    db=getCloudService(cred, conf)
    docSchool2=${
        name:&quot;NYU&quot;,
        location:&quot;NY&quot;,
        year:2010
    }
    try{
       getResponse=db.collection(&quot;Coll_Doc_7&quot;).document(&quot;docSchool2&quot;).getPath()
    }
    catch(any e){
        writeDump(e)
    }
</cfscript>

親の取得

説明

親ドキュメントを取得します。

シンタックス

getParent()

戻り値

親ドキュメントまたはコレクションの参照。

次に例を示します。

<cfscript>
    cred = {
projectId : &quot;my-gcp-project&quot;,
credentialJsonFilePath : &quot;File-path-cred.json&quot;
};
conf = {
serviceName : &quot;firestore&quot;
};
    db=getCloudService(cred,conf)
    docSchool2=${
        name:&quot;NYU&quot;,
        location:&quot;NY&quot;,
        year:2010
    }
    getParentResponse=db.collection(&quot;School_Doc&quot;).document(&quot;school1&quot;).getParent().getID();
    writeDump(getParentResponse)
</cfscript>

コレクション

説明

コレクションを作成します。

シンタックス

collection(String path)

パラメーター

  • Path:指定されたパスに作成されるコレクション。

戻り値

コレクションへの参照。

次に例を示します。

<cfscript>
    cred = {
projectId : &quot;my-gcp-project&quot;,
        vendorName: &quot;GCP&quot;,
credentialJsonFilePath : &quot;File-path-cred.json&quot;
};
conf = {
serviceName: &quot;firestore&quot;
};
   
    db=getCloudService(cred, conf)
    // create the document
    docData = ${
        name: &quot;Bangalore&quot;,
state: &quot;KA&quot;,
country: &quot;INDIA&quot;
    }
    // add document to the collection
    res = db.collection(&quot;cities_D&quot;).runQuery().get();
    // get the response
    writeDump(res)
    // get the document
    writeOutput(ArrayLen(res.getDocuments()))
</cfscript>

作成

説明

ドキュメントを作成します。ドキュメントが既に存在している場合は、書き込みに失敗します。

シンタックス

create(Struct docName)

パラメーター

  • docName:作成するドキュメントの名前。

戻り値

ドキュメント ID。

次に例を示します。

<cfscript>
    cred = {
projectId : &quot;my-gcp-project&quot;,
credentialJsonFilePath : &quot;File-path-cred.json&quot;
};
conf = {
serviceName : &quot;firestore&quot;
};
    db=getCloudService(cred,conf)
    docSchool2=${
        name:&quot;NYU&quot;,
        location:&quot;NY&quot;,
        year:2010
    }
    try{
        createResponse=db.collection(&quot;Coll_Doc_2&quot;).document(&quot;doc_Doc_2&quot;).create(docSchool2).get()
        writeOutput(&quot;Collection created successfully&quot;)
        writeDump(createResponse)
    }
    catch(any e){
        writeDump(e)
    }
</cfscript>

削除

説明

コレクション内のドキュメントを削除します。

シンタックス

delete()

戻り値

ドキュメントが更新されたときの未来のタイムスタンプ。

次に例を示します。

<cfscript>
    cred = {
projectId : &quot;my-gcp-project&quot;,
credentialJsonFilePath : &quot;File-path-cred.json&quot;
};
conf = {
serviceName : &quot;firestore&quot;
};
    db=getCloudService(cred,conf)
    // db.collection(&quot;School_Doc&quot;).document(&quot;school1&quot;).delete();
     docSchool2=${
        name:&quot;NYU&quot;,
        location:&quot;NY&quot;,
        year:2010
    }
     try{
        deleteResponse=db.collection(&quot;Coll_Doc_5&quot;).document(&quot;doc_Doc_5&quot;).delete()
        writeOutput(&quot;Document deleted successfully&quot;)
        writeDump(deleteResponse)
    }
    catch(any e){
        writeDump(e
    }
</cfscript>

更新

説明

ドキュメントのフィールドを更新します。

シンタックス

update(structData)

パラメーター

  • StructData:ドキュメント内で更新する必要がある新しいデータ。

戻り値

ドキュメントが更新されたときの未来のタイムスタンプ。

次に例を示します。

<cfscript>
    cred = {
projectId : &quot;my-gcp-project&quot;,
credentialJsonFilePath : &quot;File-path-cred.json&quot;
};
conf = {
serviceName : &quot;firestore&quot;
};
    db=getCloudService(cred,conf)
    // db.collection(&quot;School_Doc&quot;).document(&quot;school1&quot;).update(docSchool2).get()
    docSchool2=${
        name:&quot;NYU&quot;,
        location:&quot;NY&quot;,
        year:2010
    }
     try{
        updateResponse=db.collection(&quot;Coll_Doc_4&quot;).document(&quot;doc_Doc_3&quot;).update(docSchool2)
        writeOutput(&quot;Document updated successfully&quot;)
        writeDump(updateResponse)
    }
    catch(any e){
        writeDump(e)
    }
</cfscript>

orderBy(string fieldname)

説明

このメソッドは、指定されたフィールド名で並べ替えられたドキュメントを返します。

パラメーター

  • FieldName:指定されたフィールドに基づいて、クエリの結果を並べ替えます。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    students=db.collection(&quot;students_p&quot;);
    query=students.orderBy(&quot;last_name&quot;);
    results = query.runQuery().get();
</cfscript>

limit(int value)

説明

このメソッドは、指定した値に基づいてドキュメント数を制限します。

パラメーター

  • Value:クエリの結果を指定された値に制限します。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    students=db.collection(&quot;students_p&quot;);
    query=students.orderBy(&quot;last_name&quot;).limit(20);
    results = query.runQuery().get();
    writeDump(results)
</cfscript>

降順でのデータの並べ替え

<cfscript>
    db = getCloudService(Application.cred, Application.conf);
    students=db.collection(&quot;students_p&quot;);
    query=students.orderBy(&quot;first_name&quot;,&quot;descending&quot;);
    results = query.runQuery().get();
    writeDump(results)
</cfscript>

limitToLast(int value)

説明

このメソッドは、指定された値に基づいて、最後の n 個のレコードを返します。

パラメーター

  • Value:表示される結果の最大数を設定します。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    students=db.collection(&quot;students_p&quot;);
    query=students.orderBy(&quot;first_name&quot;).limittolast(3);
    results = query.runQuery().get();
    writeDump(results)
</cfscript>

offset(int value)

説明

このメソッドは、指定された値の後にある残りのレコードを返します。

パラメーター

  • Value:指定された値をスキップし、次の結果セットを表示します。

戻り値

フィルターが適用された新しいクエリオブジェクト。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    students=db.collection(&quot;students_p&quot;)
    query=students.offset(5)
    results = query.runQuery().get()
    writeDump(results)
</cfscript>

startAfter(array[])

説明

このメソッドは、指定された値の後のレコードを返します。

パラメーター

  • array:指定された配列値の後にクエリ結果を表示します。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    locations=db.collection(&quot;locations_p&quot;);
    query=locations.orderBy(&quot;rating&quot;).orderBy(&quot;name&quot;).limit(20)
    results=query.startAfter([3.8,&quot;Sarkhej Roza&quot;]).limit(20)
    writeDump(results)
</cfscript>

startAt(array[])

説明

このメソッドは、指定された配列値で始まるクエリ結果を表示します。

パラメーター

  • array:入力配列。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    db = getCloudService(Application.cred, Application.conf);
    locations=db.collection(&quot;locations_p&quot;);
    query=locations.orderBy(&quot;rating&quot;).startAt([4.1]);
    results=query.runQuery().get()
    writeDump(results)
</cfscript>

endAt(array)

説明

このメソッドは、指定された配列値で終わるクエリ結果を表示します。

パラメーター

  • array:入力配列。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    locations=db.collection(&quot;locations_p&quot;);
    query=locations.orderBy(&quot;rating&quot;).endAt([4.6]);
    results=query.runQuery().get()
    writeDump(results)
</cfscript>

endBefore(array[])

説明

このメソッドは、指定された配列値より前で終わるクエリ結果を表示します。

パラメーター

  • array:指定された配列値の前にクエリ結果を表示します。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    locations=db.collection(&quot;locations_p&quot;);
    query=locations.orderBy(&quot;rating&quot;).endBefore([4.6]);
    results=query.runQuery().get()
    writeDump(results)
</cfscript>

startAfter(DocumentSnapshot value)

説明

クエリの順序に基づいて、指定されたフィールドの後に始まる新しいクエリを返します。フィールド値の順序は、クエリの order by 句の順序と一致する必要があります。

パラメーター

  • value:ドキュメントのスナップショットを値として渡します。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    db = getCloudService(Application.cred, Application.conf);
    locations=db.collection(&quot;locations_p&quot;);
    myquery=locations.orderBy(&quot;rating&quot;)
    results=myquery.runQuery().get();
    count=results.size();
    startDocument=results.getDocuments()[10];
    myquery=locations.orderBy(&quot;rating&quot;).startAfter(startDocument)
    results=myquery.runQuery().get();
    writeDump(results)
</cfscript>

startAt(DocumentSnapshot value)

説明

クエリの順序に基づいて、指定されたフィールドで始まる新しいクエリを返します。フィールド値の順序は、クエリの order by 句の順序と一致する必要があります。

パラメーター

  • value:ドキュメントのスナップショットを値として渡します。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    db = getCloudService(Application.cred, Application.conf);
    count=0;
    locations=db.collection(&quot;locations_p&quot;);
    myquery=locations.orderBy(&quot;rating&quot;)
    results=myquery.runQuery().get();
    startDocument=results.getDocuments()[7];
    myquery=locations.orderBy(&quot;rating&quot;).startAt(startDocument)
    results=myquery.runQuery().get();
    writeDump(results)
</cfscript>

endAt(DocumentSnapshot value)

説明

クエリの順序に基づいて、指定されたフィールドで終わる新しいクエリを返します。フィールド値の順序は、クエリの order by 句の順序と一致する必要があります。

パラメーター

  • value:ドキュメントのスナップショットを値として渡します。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    db = getCloudService(Application.cred, Application.conf);
    locations=db.collection(&quot;locations_p&quot;);
    myquery=locations.orderBy(&quot;rating&quot;)
    results=myquery.runQuery().get();
    endDocument=results.getDocuments()[results.size()-2];
    myquery=locations.orderBy(&quot;rating&quot;).endAt(endDocument);
    results=myquery.runQuery().get();
    writeDump(results)
</cfscript>

endBefore(DocumentSnapshot value)

説明

クエリの順序に基づいて、指定されたフィールドの前で終わる新しいクエリを返します。フィールド値の順序は、クエリの order by 句の順序と一致する必要があります。

パラメーター

  • value:ドキュメントのスナップショットを値として渡します。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    db = getCloudService(Application.cred, Application.conf);
    locations=db.collection(&quot;locations_p&quot;);
    myquery=locations.orderBy(&quot;rating&quot;)
    results=myquery.runQuery().get();
    endDocument=results.getDocuments()[15];
    myquery=locations.orderBy(&quot;rating&quot;).endBefore(endDocument)
    results=myquery.runQuery().get();
    writeDump(results)
</cfscript>

トランザクションとは、1 つ以上のドキュメントに対して読み取り/書き込みを行う一連の操作のことです。詳しくは、公式 GCP ドキュメントを参照してください。

説明

DocumentReference の場所に新規ドキュメントを作成します。ドキュメントが既に存在している場合は、書き込みに失敗します。

シンタックス

create(DocumentReference documentReference, Struct data)

パラメーター

  • DocumentReference:トランザクションを実行するドキュメント。
  • データ:ドキュメントに入力するデータ。

戻り値

バッファリングされた新規トランザクションオブジェクト。

次に例を示します。

<cfscript>
    cred = {
projectId : &quot;my-project-id&quot;,
        vendorName: &quot;GCP&quot;,
credentialJsonFilePath : &quot;Path-creds-file.json&quot;
};
conf = {
serviceName: &quot;firestore&quot;
};
    db=getCloudService(cred, conf)
    docData = ${
LOCATION: &quot;5th Avenue&quot;,
NAME: &quot;John's&quot;,
TYPE: &quot;Thai&quot;,
TOTAL: 10
        }
db.document(&quot;Restaurants_D/Restaurant4&quot;).create(docData).get();

        returnValue = db.runTransaction(transaction => {
            try {
    restaurant4=db.document(&quot;Restaurants_D/Restaurant4&quot;);
                number = transaction.getDocument(restaurant4).get().getData()[&quot;TOTAL&quot;];
                review1 = db.document(&quot;Restaurants_D/Restaurant4/Reviews/review1&quot;);
                transaction.create(review1,{&quot;rating&quot;: 5});
                transaction.update(restaurant4, {&quot;TOTAL&quot; : number+1})
                return transaction
            }
            catch (any e)
            { return e; }
        }).get()
</cfscript>

説明

DocumentReference の場所に新規ドキュメントを作成します。ドキュメントが既に存在している場合は、書き込みに失敗します。

シンタックス

create(DocumentReference documentReference, CFObject data)

パラメーター

  • DocumentReference:トランザクションを実行するドキュメント。
  • データ:ドキュメントに入力するオブジェクト。

戻り値

バッファリングされた新規トランザクションオブジェクト。

次に例を示します。

<cfscript>
    cred = {
projectId : &quot;my-project-id&quot;,
        vendorName: &quot;GCP&quot;,
credentialJsonFilePath : &quot;Path-creds-file.json&quot;
};
conf = {
serviceName: &quot;firestore&quot;
};
    db=getCloudService(cred, conf)
    objPerson = new testFiles._Person(&quot;Jack&quot;, &quot;Sparrow&quot;, 900);
db.document(&quot;Users_D/usr1&quot;).create(objPerson).get();

        db.runTransaction(transaction => {
            try {
    usr1=db.document(&quot;Users_D/usr1&quot;);
                number = transaction.getDocument(usr1).get().getData()[&quot;phonenumber&quot;];
                comment1 = db.document(&quot;Users_D/usr1/Comment/comment1&quot;);
                transaction.create(comment1,{&quot;comment1&quot;: &quot;Test Comment.&quot;});
                transaction.update(usr1, {&quot;phonenumber&quot; : number+1})
                return transaction
            }
            catch (any e)
            { return e; }
        }).get()
 
</cfscript>

説明

この DocumentReference によって参照されているドキュメントを上書きします。まだドキュメントが存在しない場合は、作成されます。ドキュメントが既に存在している場合は、上書きされます。

シンタックス

set(DocumentReference documentReference, Struct data)

パラメーター

  • DocumentReference:トランザクションを実行するドキュメント。
  • データ:ドキュメント内で上書きするデータ。

戻り値

バッファリングされた新規トランザクションオブジェクト。

次に例を示します。

<cfscript>
    cred = {
projectId : &quot;my-project-id&quot;,
        vendorName: &quot;GCP&quot;,
credentialJsonFilePath : &quot;Path-creds-file.json&quot;
};
conf = {
serviceName: &quot;firestore&quot;
};
    db=getCloudService(cred, conf)
    db = getCloudService(this.cred, this.conf);
    db.collection(&quot;Cities_D&quot;).document(&quot;SF&quot;);
docData = ${
Country: &quot;USA&quot;,
Population: 860000
        }
docRef.set(docData).get();

        returnValue = db.runTransaction(transaction => {
            try {
                number = transaction.getDocument(docRef).get().getData()[&quot;Population&quot;];
                transaction.update(docRef, {&quot;Population&quot; : number+1});
                return transaction;
            }
            catch (any e)
            { return e; }
        }).get()
</cfscript>

説明

この DocumentReference によって参照されているドキュメントを上書きします。まだドキュメントが存在しない場合は、作成されます。ドキュメントが既に存在している場合は、上書きされます。

シンタックス

set(DocumentReference documentReference, CFObject data)

パラメーター

  • DocumentReference:トランザクションを実行するドキュメント。
  • データ:ドキュメント内で上書きするオブジェクト。

戻り値

バッファリングされた新規トランザクションオブジェクト。

次に例を示します。

_deleteDoc.cfc

component
{
      function deleteDoc(docRef)
{
collections = docRef.listCollections();
for(collection in collections)
deleteCol(collection);
docRef.delete().get();
}
 
function deleteCol(colRef)
{
    documents = colRef.listDocuments();
        for(document in documents)
        deleteDoc(document);
    }
}

file.cfm

<cfscript>
    cred = {
        projectId : &quot;my-project-id&quot;,
        vendorName: &quot;GCP&quot;,
        credentialJsonFilePath : &quot;Path-creds-file.json&quot;
    };
    conf = {
        serviceName: &quot;firestore&quot;
    };
    db=getCloudService(cred, conf)
   
    obj=CreateObject(&quot;component&quot;,&quot;_deleteDoc&quot;);
    docRef = db.collection(&quot;Cities_D&quot;).document(&quot;SF3&quot;);
        docData = ${
        Country: &quot;USA&quot;,
        Population: 860000
        }
    docData1 = ${
        Country: &quot;USA&quot;,
        Population: 900000
        }

    if(db.document(&quot;Cities_D/SF3&quot;).getDocument().get().exists())
    obj.deleteDoc(docRef);

    docRef.create(docData).get();
        returnValue = db.runTransaction(transaction => {
            try {
                Population = transaction.getDocument(docRef).get().getData()[&quot;Population&quot;];
        transaction.set(docRef,docData1);
        newPopulation= Population+1;
        return newPopulation;
            }
            catch (any e)
            { return e; }
        }).get()
</cfscript>

説明

この DocumentReference によって参照されているドキュメントのフィールドを更新します。

シンタックス

update(DocumentReference documentReference, Struct fields)

パラメーター

  • DocumentReference:トランザクションを実行するドキュメント。
  • フィールド:ドキュメント内で更新するフィールド。

戻り値

バッファリングされた新規トランザクションオブジェクト。

次に例を示します。

docRef = db.collection(&quot;Cities_D&quot;).document(&quot;SF10&quot;);
docData = ${
    Country: &quot;USA&quot;,
    Population: 860000
}
docData1 = ${
    Country: &quot;USA&quot;,
    Population: 900000
}
docRef.create(docData).get();

db.runTransaction(trans => {
            try {
                Population = trans.getDocument(docRef).get().getData()[&quot;Population&quot;];
trans.update(docRef,docData1);
return trans;
}
            catch (any e)
            { return e; }
}).get()

説明

更新時間を前提として参照されているドキュメントを削除します。

シンタックス

delete(DocumentReference documentReference)

パラメーター

  • DocumentReference:トランザクションを実行するドキュメント。

戻り値

バッファリングされた新規トランザクションオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-project-id&quot;,
        vendorName: &quot;GCP&quot;,
    credentialJsonFilePath : &quot;Path-creds-file.json&quot;
    };
    conf = {
        serviceName: &quot;firestore&quot;
    };
    db=getCloudService(cred, conf)
    docData = ${
        Country: &quot;USA&quot;,
        Population: 860000
    }
    docRef.set(docData).get();
    db.runTransaction(transaction => {
            try {
                Population = transaction.getDocument(docRef).get().getData()[&quot;Population&quot;];
                newPopulation= Population+1;
                if(Population <= 860000)
            {
                transaction.update(docRef, {&quot;Population&quot; : newPopulation});
                transaction.delete(docRef);
                return &quot;Document deleted successfully inside Transaction !!&quot;;
    }
else
    return &quot;Sorry!  Population is too big.&quot;;	
            }
            catch (any e)
            { return e; }
        }).get()
</cfscript>

説明

指定されたクエリの結果セットを返します。返されたすべてのドキュメントに悲観ロックを保持します。

シンタックス

runQuery(Query query)

パラメーター

  • Query:結果を取得するためのクエリ。

戻り値

クエリの結果を含む未来のクエリスナップショット。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-project-id&quot;,
        vendorName: &quot;GCP&quot;,
        credentialJsonFilePath : &quot;Path-creds-file.json&quot;
    };
    conf = {
        serviceName: &quot;firestore&quot;
    };
    db=getCloudService(cred, conf)
    docRef = db.collection(&quot;Cities_D&quot;).document(&quot;SF8&quot;);
    docData = ${
        Country: &quot;USA&quot;,
        Population: 860000,
        count: 8
    }
    docRef.set(docData).get();

cities=db.collection(&quot;Cities_D&quot;);
        query=cities.whereEqualTo(&quot;count&quot;,8);

        db.runTransaction(transaction => {
            try {
                number = transaction.runQuery(query).get().getDocuments()[1].getData()[&quot;Population&quot;];
                transaction.update(docRef, {&quot;Population&quot; : number+1});
                return transaction;
            }
            catch (any e)
            { return e; }
        }).get()
</cfscript>

シンタックス

hasTransactionId()

戻り値

有効なトランザクション ID が含まれている場合は、True。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-project-id&quot;,
        vendorName: &quot;GCP&quot;,
        credentialJsonFilePath : &quot;Path-creds-file.json&quot;
    };
    conf = {
        serviceName: &quot;firestore&quot;
    };
    db=getCloudService(cred, conf)
    docRef = db.collection(&quot;Cities_D&quot;).document(&quot;SF&quot;);
    docData = ${
        Country: &quot;USA&quot;,
        Population: 860000
    }
    docData1 = ${
        Country: &quot;USA&quot;,
        Population: 900000,
        count: 1
    }
    docRef.set(docData).get();

        returnValue = db.runTransaction(transaction => {
            try {
                Population = transaction.getDocument(docRef).get().getData()[&quot;Population&quot;];
        transaction.set(docRef,docData1);
        newPopulation= Population+1;
        transaction.update(docRef, {&quot;Population&quot; : newPopulation});
        return transaction;
            }
            catch (any e)
            { return e; }
        }).get();

        writeOutput(&quot;HasTransactionID &quot; & returnValue.hasTransactionId())
</cfscript>

特定のトランザクションについて、API の更新、設定、作成、削除を含む書き込み数を取得します。

シンタックス

getMutationSize()

戻り値

トランザクションのバッファーされた書き込み。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-project-id&quot;,
        vendorName: &quot;GCP&quot;,
        credentialJsonFilePath : &quot;Path-creds-file.json&quot;
    };
    conf = {
        serviceName: &quot;firestore&quot;
    };
    db=getCloudService(cred, conf)
    docRef = db.collection(&quot;Cities_D&quot;).document(&quot;SF&quot;);
    docData = ${
        Country: &quot;USA&quot;,
        Population: 860000
    }
    docData1 = ${
        Country: &quot;USA&quot;,
        Population: 900000,
        count: 1
    }
    docRef.set(docData).get();

        returnValue = db.runTransaction(transaction => {
            try {
                Population = transaction.getDocument(docRef).get().getData()[&quot;Population&quot;];
    transaction.set(docRef,docData1);
    newPopulation= Population+1;
    transaction.update(docRef, {&quot;Population&quot; : newPopulation});
    return transaction;
            }
            catch (any e)
            { return e; }
        }).get();

    writeOutput(&quot;MutationSize is &quot; & returnValue.getMutationSize())
</cfscript>

非同期トランザクション

追加、設定、更新、削除の各メソッドは戻り値として Future オブジェクトを返します。つまり、ColdFusion の Future 機能を利用できます。以下の例は、チェーンによって呼び出しを処理できる別の方法を示しています。チェーンはワーカースレッドを使用しているため、これらの結果はメイン スレッドとは別のバッファーを使用してファイルに書き込まれます。

次に例を示します。

<cfscript>
    aUser = ${
        firstName: &quot;Harry&quot;,
        lastName: &quot;Potter&quot;,
        age: 14,
        address: &quot;Hogwarts&quot;
    }
    
    harry = db.document(&quot;users/harry&quot;);
    fileHandle = fileOpen(ExpandPath(&quot;./crudDump.txt&quot;), &quot;write&quot;);
    
    harry.set(aUser).then(
        resultFromFirestore => {
            fileappend(fileHandle, resultFromFirestore);
            harry.getDocument()
            .then(result => {
                    fileappend(fileHandle, serialize(result.getData(),&quot;json&quot;));
                }
            ).error(ex => {
                fileappend(fileHandle, ex.getMessage());
            })
        }
    )
    .error(ex => {
        fileappend(fileHandle, ex.getMessage());
    })
</cfscript>

スナップショットリスナーの追加 - ドキュメント

説明

このメソッドを使用すると、このメソッドが適用されるイベントをリッスンできます。イベントヒットが成功すると、onSuccess メソッドが実行されます。それ以外の場合は、onFailure が実行されます。このイベントは、ドキュメントへの書き込み時にトリガーされます。

シンタックス

addSnapshotListener(UDFMethod onSuccess, UDFMethod onFailure)

戻り値

接続を削除するオブジェクト。

次に例を示します。

<cfscript>
    cred = {
projectId : &quot;my-project-id&quot;,
credentialJsonFilePath : &quot;Path-creds-file.json&quot;
};
conf = {
serviceName : &quot;firestore&quot;
};
    pubSubClient=getCloudService(cred,conf)
    docFuture = db.collection(&quot;stock_p&quot;).document(&quot;doc&quot;);
    path=ExpandPath(&quot;./documentSnapshot.txt&quot;)
    onSuccess = results => {
        fileAppend(path, serialize(results,&quot;json&quot;));
    }
    onFailure = exception => {
        fileAppend(path, exception.getMessage());
    }
    docFuture.addSnapshotListener(onSuccess, onFailure)
</cfscript>

スナップショットリスナーの追加 - クエリ

説明

クエリは、このメソッドが適用されるクエリのリスニングを開始します。イベントヒットが成功すると、onSuccess メソッドが実行されます。それ以外の場合は、onFailure が実行されます。このイベントは、クエリへの書き込み時にトリガーされます。

シンタックス

addSnapshotListener(UDFMethod onSuccess, UDFMethod onFailure)

戻り値

接続を削除するオブジェクト。

例、

<cfscript>
    cred = {
projectId : &quot;my-project-id&quot;,
credentialJsonFilePath : &quot;Path-creds-file.json&quot;
};
conf = {
serviceName : &quot;firestore&quot;
};
    pubSubClient=getCloudService(cred,conf)
    stocks = db.collection(&quot;stock_p&quot;)
    path=ExpandPath(&quot;./documentSnapshot.txt&quot;)
    onSuccess = result => {
        fileAppend(path, serialize(result.documentChanges,&quot;json&quot;));
    }
    onFailure = exception => {
        fileAppend(path, exception.getMessage());
    }
    stocks.addSnapshotListener(onSuccess, onFailure)
</cfscript>
注意:

DocumentReference は、document() メソッドの戻り値を表すインターフェイスです。

サポートされている操作は次のとおりです。

  • Create
    • create(DocumentReference documentReference, Struct data)
    • create(DocumentReference documentReference, CFObject data)
  • Set
    • set(DocumentReference documentReference, Struct data)
    • set(DocumentReference documentReference, Struct data, Boolean merge)
    • set(DocumentReference documentReference, CFObject data)
    • set(DocumentReference documentReference, CFObject data, Boolean merge)
  • Update
    • update(DocumentReference documentReference, Struct fields)
  • Delete
    • delete(DocumentReference documentReference)
  • getMutationSize()
  • commit()

バッチ

説明

一度に複数の書き込みをコミットします。サーバーに対して複数の書き込み呼び出しを行う代わりに、バッチを使用してバッファリングし、一度にコミットすることができます。

シンタックス

batch()

例、

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    batch = db.batch();
    docData1 = ${
            Country: &quot;USA&quot;,
            Population: 10
     }
    docData2 = ${
            Country: &quot;India&quot;,
            Population: 200
     }
     docData3 = ${
            Country: &quot;India&quot;,
            Population: 400
     }
 
    docRef1 = db.collection(&quot;BW_S&quot;).document(&quot;BW1&quot;);
    docRef2 = db.collection(&quot;BW_S&quot;).document(&quot;BW2&quot;);

    batch.set(docRef1, docData1);
    batch.set(docRef2, docData2);
    batch.update(docRef2, docData3);
    batch.commit().get();
</cfscript>

クエリ関数とフィルタリング関数

説明

このメソッドは、フィールド名が指定された値と等しいドキュメントをフィルターします。

パラメーター

  • FieldName:ドキュメント内でクエリを行うためのキー。
  • 値:ドキュメント内でクエリする値。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
conf = {
serviceName : &quot;firestore&quot;
};
    db=getCloudService(cred,conf)
    students=db.collection(&quot;students_p&quot;);
    query=students.whereEqualTo(&quot;age&quot;,16);
    results = query.runQuery().get();
documents=results.getdocuments()
for(i=1;i<=results.size();i++){
writeDump(documents[i].getdata())
}
</cfscript>

説明

このメソッドは、フィールド名が指定された値と等しくないドキュメントを返します。

パラメーター

  • FieldName:ドキュメント内でクエリを行うためのキー。
  • 値:ドキュメント内でクエリする値。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    reviews=db.collectionGroup(&quot;reviews&quot;);
    query=reviews.whereNotEqualTo(&quot;author&quot;,&quot;ravi&quot;);
    results = query.runQuery().get()
    documents=results.getdocuments()
    for(i=1;i<=results.size();i++){
        writeDump(documents[i].getdata())
    }
</cfscript>

説明

このメソッドは、フィールド名が指定された値以上のドキュメントを返します。

パラメーター

  • FieldName:ドキュメント内でクエリを行うためのキー。
  • 値:ドキュメント内でクエリする値。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
    credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    reviews=db.collection(&quot;restaurants_p/6gaKC7syRE1qUGOD0cZZ/reviews&quot;);
    query=reviews.whereGreaterThanOrEqualTo(&quot;rating&quot;,4).select([&quot;author&quot;]);
    results = query.runQuery().get()
    writeDump(results)
</cfscript>

説明

このメソッドは、フィールド名が指定された値以下のドキュメントを返します。

パラメーター

  • FieldName:ドキュメント内でクエリを行うためのキー。
  • 値:ドキュメント内でクエリする値。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    students=db.collection(&quot;students_p&quot;);
    query=students.whereLessThanOrEqualTo(&quot;age&quot;,15);
    results = query.runQuery().get()
    writeDump(results)
</cfscript>

説明

このメソッドは、フィールド名が指定された値より大きいドキュメントを返します。

パラメーター

  • FieldName:ドキュメント内でクエリを行うためのキー。
  • 値:ドキュメント内でクエリする値。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    students=db.collection(&quot;students_p&quot;);
    query=students.whereGreaterThan(&quot;age&quot;,16).orderBy(&quot;age&quot;);
    results = query.runQuery().get();
    writeDump(results)
</cfscript>

説明

このメソッドは、フィールド名が指定された値より小さいドキュメントを返します。

パラメーター

  • FieldName:ドキュメント内でクエリを行うためのキー。
  • 値:ドキュメント内でクエリする値。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    students=db.collection(&quot;students_p&quot;);
    query=students.whereLessThanOrEqualTo(&quot;age&quot;,15);
    results = query.runQuery().get()
    writeDump(results)
</cfscript>

説明

このメソッドは、指定された配列値に基づいてドキュメントをフィルターします。

パラメーター

  • FieldName:ドキュメント内でクエリを行うためのキー。
  • 配列:ドキュメント内でクエリする配列。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    students=db.collection(&quot;students_p&quot;);
    query=students.whereArrayContains(&quot;marks&quot;,70);
    results = query.runQuery().get();
    writeDump(results)
  </cfscript>

説明

このメソッドは、指定された配列の値に基づいてドキュメントをフィルターします。

パラメーター

  • FieldName:ドキュメント内でクエリを行うためのキー。
  • 配列:ドキュメント内でクエリする配列。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    students=db.collection(&quot;students_p&quot;);
    query=students.whereIn(&quot;age&quot;,[16,17,25,7]);
    results = query.runQuery().get();
    writeDump(results)
</cfscript>

説明

このメソッドは、指定された配列内に存在しない値に基づいてドキュメントをフィルターします。

パラメーター

  • FieldName:ドキュメント内でクエリを行うためのキー。
  • 配列:ドキュメント内でクエリする配列。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    students=db.collection(&quot;students_p&quot;);
    query=students.whereNotIn(&quot;age&quot;,[16,17,25,7]);
    results = query.runQuery().get()
    writeDump(results)
</cfscript>

説明

このメソッドは、指定された配列内に任意の値が含まれているかどうかに基づいてドキュメントをフィルターします。

パラメーター

  • FieldName:ドキュメント内でクエリを行うためのキー。
  • 配列:ドキュメント内でクエリする配列。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    students=db.collection(&quot;students_p&quot;);
    query=students.whereArrayContainsAny(&quot;marks&quot;,[71.0,15,0,65.5]);
    results = query.runQuery().get()
    writeDump(results)
</cfscript>

説明

このメソッドは、配列として指定されたフィールド名の値に基づいてドキュメントを選択します。

パラメーター

  • array:ドキュメント内でクエリする配列。

戻り値

フィルターが適用された新しいクエリオブジェクト。

次に例を示します。

<cfscript>
    cred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;File-path-cred.json&quot;
    };
    conf = {
        serviceName : &quot;firestore&quot;
    };
    db=getCloudService(cred,conf)
    students=db.collection(&quot;students_p&quot;);
    query=students.whereEqualTo(&quot;age&quot;,16).select([&quot;first_name&quot;,&quot;age&quot;]);
    results = query.runQuery().get()
    writeDump(results)
</cfscript>

ヘルプをすばやく簡単に入手

新規ユーザーの場合

Adobe MAX 2025

Adobe MAX Japan
クリエイターの祭典

2025 年 2 月 13 日
東京ビッグサイト