2017-11-06 3 views
0

ドキュメントはすべて、そのような配列要素を持っている:Azure Cosmos DB Query:ドキュメント間で配列を連結する方法は?私CosmosDBデータベース内

{ 
    id: 1, 
    list: [1, 2, 3] 
}, 
{ 
    id: 2, 
    list: [2, 3, 4] 
}, 
... 

私はすべてのドキュメント間の配列「リスト」を連結クエリは(理想的には、私がUNIQUE連結をたいが、私は開始することができますしたいですそれらすべてで)。私が欲しい

結果は次のとおりです。

[1, 2, 3, 2, 3, 4] 

またはより良い:

[1, 2, 3, 4] 

この集計のような「感じ」が、私はそれのまわりで私の頭を取得するように見えることはできません。何か案は?

各文書を順番に読み込んで繰り返し処理できることはわかっています。私はクエリでこれを行い、順番にすべてのドキュメントをロードする費用を避けることを望んでいた。これはすべて返すこと

SELECT value i 
FROM c 
join i in c.list 

注:

答えて

1

あなたが参加することにより、アレイ内の個々の値を選択して、valueキーワードを使用して、単一の配列に戻し、結果の値をマージすることができますSQLクエリ

を使用して単一の配列内の値ですが、残念ながら重複を含みます。

私の知るところでは、現在のところ、サーバー側の別個の機能はありません。しかし、1k +投票で"Provide support for DISTINCT"というリクエストがありますので、将来はいつでも可能になると思います。これが気になるものなら、行き、upvoteしてください。あなたはDocumentDBサーバーサイドを利用する方法の詳細を読むことができます

function GetUniqueItems() { 
    var collection = getContext().getCollection(); 

    var isAccepted = collection.queryDocuments(
     collection.getSelfLink(), 
     'SELECT value i FROM c join i in c.list', 
     function (err, feed, options) { 
      if (err) throw err; 

      var uniqueArray = feed 
       .filter(function(item, pos) { return feed.indexOf(item) == pos;}); 
      getContext().getResponse().setBody(uniqueArray); 
     }); 

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

:SPにサーバーサイドで行わ独自のリストはあなたの中にdocumentDBコレクションをストアドプロシージャを使用することです取得の

別の方法を使用して

プログラミングは "Azure Cosmos DB server-side programming: Stored procedures, database triggers, and UDFs"です。

+0

これは私が必要とするものです。ありがとうございます! – n8wrl

関連する問題