2017-07-09 6 views
2

は、例えば1つのdocumentDbコレクションに保存する第二のコレクション内のドキュメントを更新/items/{documentId}。文書はのようになります。Azureの機能をアプリにCosmosDB文書が作成されるたびに実行し、私たちはアイテムを持っているシナリオを、持っている

{ 
    id: [guid], 
    rating: 5, 
    numReviews: 1 
} 

私は/user-reviews/{userIdAsPartitionKey}/{documentId}

の下で第2の文書コレクションを持っている文書はそうのようになります。このドキュメントのアップロード時に

{ 
    id: [guid], 
    itemId: [guidFromItemsCollection], 
    userId: [userId], 
    rating: 4 
} 

を、私はへのトリガをしたいですこの新しいユーザー格付け文書を入力として受け取り、itemsコレクションから関連する文書を検索し、新しいデータに基づいてitems文書を変換することができます。

私の問題の核心は:どのように私は、ドキュメントのアップサートをオフにトリガすることができ、私はすべてのFuncitonアプリ内で、どのように取得し、別のコレクションからドキュメントを修正することができますか?


私はトリガがCosmosDBに可能であるという考えでいじめる以下のリンクを、調査してきましたが、テーブルには、我々は、文書のDBのアップロードにトリガをフックすることはできません示唆しています。 https://docs.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-documentdb

それが直接設定することはできません場合は、私の仮定は、私は、この処理自体をキックオフすることができますアップサートを扱う中間層のサービスを(現在はクライアント側からDocumentClientを使用して)、持つべきですが、私は好き可能な場合はサーバレス機能アプリのシンプルさ。

答えて

2

操作の範囲はコレクションになります。あなたは(あなたが(あなたが示唆したように)あなたのアプリケーション層でこれを実装する必要がありますか...同じコレクション内のドキュメントの両方のタイプを保存したいのいずれか

コレクションA.でイベントからコレクションBでの動作をトリガすることはできません一般的なシナリオ)。クエリのフィルタリングに役立つdoctypeプロパティを追加する必要があるかもしれませんが、ドキュメントはスキーマフリーなので、異種のドキュメントを同じコレクションに格納することができます。

はまた:あなたは、Azureの機能を述べました。関数内で複数のデータベース呼び出しを停止することは何もありません(たとえば、コレクション内で何かが起きて関数が呼び出されると、関数はコレクションbで操作を実行できます)。これはトランザクションではないことに注意してください。

関連する問題