Azure Cosmos DBは、関連するエンティティをクエリ結果に追加します

ニキータ・フェドロフ

私のcosmosDBコレクションには、次のようなタイプのエンティティがあります。

// Suppliers:

[{
    "id": "some_unique_str",
    "products": [
        "id_of_product1",
        "id_of_product2"
    ]
}]

// Products: 

[{
    "id": "id_of_product1",
    "name": "product name"
},
//...
]

このような結果を得るには、クエリを作成する必要があります。

[{
    "id": "some_unique_str",
    "products": [
        {
            "id": "id_of_product1",
            "name": "product 1 name"
        },
        {
            "id": "id_of_product2",
            "name": "product 2 name"
        }
    ]
}]

言い換えれば、私はOData拡張機能を実現しようとしています。出来ますか?

ジェイゴング

cosmos db sqlapiの直接SQLではそれを実現できません。ニーズは、no-sqlデータベースではなく、リレーショナルデータベースの外部キーを使用して実装できます。

cosmos db sql apiでは、ストアドプロシージャを使用してこれを実現できます。参照用にいくつかのコードを記述しようとしました。

function sample(prefix) {
    var collection = getContext().getCollection();

    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        'SELECT c.id,c.products FROM c where is_defined(c.products)',
    function (err, feed, options) {
        if (err) throw err;

        if (!feed || !feed.length) {
            var response = getContext().getResponse();
            response.setBody('no docs found');
        }
        else {
            var response = getContext().getResponse();
            var returnArray = [];
            for (var i=0;i<feed.length;i++){  
                var map = {};
                map['id'] = feed[i].id;
                mergeData(map,feed[i].products);
                returnArray.push(map);
            }
            response.setBody(returnArray);
        }
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');

    function mergeData(map,idArray){
        var sqlQuery = {
            "query":  'SELECT c.id,c.name FROM c where not is_defined(c.products) and '+
             ' array_contains( @idArray,c.id,true) ',
            "parameters": [
                {"name": "@idArray", "value": idArray}
            ]
        }
        var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        sqlQuery,
        function (err, feed, options) {
        if (err) throw err;

        if (!feed || !feed.length) {
            map['products'] = [];
        }
        else {
           map['products'] = feed;
        }
    });
    }
}

サンプルデータの出力は次のとおりです。

ここに画像の説明を入力してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Azure Cosmos DB-クエリにパーティションキーを提供する方法の違いは?

分類Dev

Microsoft.Azure.Cosmos.Clientのパーティション間でクエリを有効にする

分類Dev

パーティションキーを指定するときに、Azure CosmosクエリのRUが高くなるのはなぜですか?

分類Dev

Azure Cosmos DB CONTAINSの構文

分類Dev

Azure Cosmos DB CONTAINSの構文

分類Dev

Azure Cosmos DB: HTTP 400 in Application Insights

分類Dev

How to structure relationships in Azure Cosmos DB?

分類Dev

Azure Cosmos DB, Delete IDS (definitely exist)

分類Dev

Azure Cosmos DB からの JSON アイテムの SQL クエリにコメントを入れる方法は?

分類Dev

Azure Cosmos DBsql結合とudf

分類Dev

Azure関数ConnectionStringSettingエラーの@azure / cosmos

分類Dev

Azure / Cosmos DBは、私が作成しなかったリクエスト(RU)をカウントしています

分類Dev

Azure Functionsバインディングで、今日を基準にした日付に基づいてCosmos DBにドキュメントをクエリする方法はありますか?

分類Dev

Azure - Configure disaster RECOVERY and automatic failover for Azure Cosmos DB?

分類Dev

Azure Cosmos DBにクエリを実行して、重複を返さないようにします

分類Dev

Azure cosmos dbは、パーティションキーがないと高速になります

分類Dev

Azure Cosmos settings history

分類Dev

Azure Cosmos Graph返す頂点プロパティを選択する方法は?

分類Dev

Cosmos DBプレトリガーをAzure関数またはWebJobに接続する方法はありますか?

分類Dev

Azure Cosmos DBでJSONを詳細に検索する方法は?

分類Dev

Azure Cosmos DB(SQL API)での非常に単純なクエリに対する高いリクエスト料金

分類Dev

Azure Cosmos DBにデフォルトの10個ではなく2個の物理パーティションを設定することは可能ですか?

分類Dev

Azure Cosmos DB for MongoDBAPI接続エラーを使用するFlaskアプリ

分類Dev

Azure Cosmos DB:ApplicationInsightsのHTTP400

分類Dev

cosmos db, generate authentication key on client for Azure Table endpoint

分類Dev

Azure Cosmos DB - 'RequestDisallowedByPolicy' error while creating container

分類Dev

SELECT rows between two dates in azure cosmos db

分類Dev

How to check what service is writing to Azure Cosmos Db?

分類Dev

Azure Cosmos DB-パーティションキーについて

Related 関連記事

  1. 1

    Azure Cosmos DB-クエリにパーティションキーを提供する方法の違いは?

  2. 2

    Microsoft.Azure.Cosmos.Clientのパーティション間でクエリを有効にする

  3. 3

    パーティションキーを指定するときに、Azure CosmosクエリのRUが高くなるのはなぜですか?

  4. 4

    Azure Cosmos DB CONTAINSの構文

  5. 5

    Azure Cosmos DB CONTAINSの構文

  6. 6

    Azure Cosmos DB: HTTP 400 in Application Insights

  7. 7

    How to structure relationships in Azure Cosmos DB?

  8. 8

    Azure Cosmos DB, Delete IDS (definitely exist)

  9. 9

    Azure Cosmos DB からの JSON アイテムの SQL クエリにコメントを入れる方法は?

  10. 10

    Azure Cosmos DBsql結合とudf

  11. 11

    Azure関数ConnectionStringSettingエラーの@azure / cosmos

  12. 12

    Azure / Cosmos DBは、私が作成しなかったリクエスト(RU)をカウントしています

  13. 13

    Azure Functionsバインディングで、今日を基準にした日付に基づいてCosmos DBにドキュメントをクエリする方法はありますか?

  14. 14

    Azure - Configure disaster RECOVERY and automatic failover for Azure Cosmos DB?

  15. 15

    Azure Cosmos DBにクエリを実行して、重複を返さないようにします

  16. 16

    Azure cosmos dbは、パーティションキーがないと高速になります

  17. 17

    Azure Cosmos settings history

  18. 18

    Azure Cosmos Graph返す頂点プロパティを選択する方法は?

  19. 19

    Cosmos DBプレトリガーをAzure関数またはWebJobに接続する方法はありますか?

  20. 20

    Azure Cosmos DBでJSONを詳細に検索する方法は?

  21. 21

    Azure Cosmos DB(SQL API)での非常に単純なクエリに対する高いリクエスト料金

  22. 22

    Azure Cosmos DBにデフォルトの10個ではなく2個の物理パーティションを設定することは可能ですか?

  23. 23

    Azure Cosmos DB for MongoDBAPI接続エラーを使用するFlaskアプリ

  24. 24

    Azure Cosmos DB:ApplicationInsightsのHTTP400

  25. 25

    cosmos db, generate authentication key on client for Azure Table endpoint

  26. 26

    Azure Cosmos DB - 'RequestDisallowedByPolicy' error while creating container

  27. 27

    SELECT rows between two dates in azure cosmos db

  28. 28

    How to check what service is writing to Azure Cosmos Db?

  29. 29

    Azure Cosmos DB-パーティションキーについて

ホットタグ

アーカイブ