1
ダブルネストされた配列を含む大きなドキュメントから、配列のフラット化された表現に投影しようとしています。DocumentDB Subクエリ
:私は次のクエリを使用して、いくつかの成功を収めてきた{
"id": "275973",
"themeId": "e4d3549c-2785-4067-83d6-f396d2212776",
"enabled": false,
"archived": false,
"components": [
{
"componentType": "header",
"enabled": true
},
{
"componentType": "prompt",
"enabled": true,
},
{
"componentType": "proactive",
"enabled": true,
},
{
"componentType": "product-feed",
"enabled": true
}
]
]
}
:私は次の構造にそれを投影するしようとしています
{
"id": "1",
"themeId": "e4d3549c-2785-4067-83d6-f396d2212776",
"enabled": false,
"archived": false,
"componentGroups": [
[
{
"componentType": "header",
"enabled": true,
"configurationVariables": {
"text1": "AAA",
"text2": "BBB"
}
}
],
[
{
"componentType": "prompt",
"enabled": true,
"configurationVariables": {
"text1": "AAA",
"text2": "BBB"
}
},
{
"componentType": "proactive",
"enabled": true,
"configurationVariables": {
"text1": "AAA",
"text2": "BBB"
}
}
],
[
{
"componentType": "product-feed",
"enabled": true,
"configurationVariables": {
"text1": "AAA",
"text2": "BBB"
}
}
]
]
}
:
私はこれに類似した文書を持っています
SELECT T.id,
T.themeId,
T.enabled,
T.archived,
[ { type: C.componentType, enabled: C.enabled } ] AS components
FROM Panels T
JOIN CG IN T.componentGroups
JOIN C IN CG
WHERE T.id IN ("275973")
ただし、これはコンポーネントタイプごとに別々のレコードを返します。私はすべてのコンポーネントが含まれているドキュメントの1つのインスタンス内に収まるようにそれらをすべて一緒に折りたたんでしようとしています。
SELECT T.id,
T.themeId,
T.enabled,
T.archived,
[
SELECT C.componentType, C.enabled
FROM CG IN T.componentGroups
JOIN C IN CG
] AS components
FROM Panels T
WHERE T.id IN ("275973")
しかし、これは無効です:私は、私はこれに似外の文書、で参加することができますネストされたSELECTような何かを行うことができるように期待していました。私はサブ/ネストされた選択とネストされた配列にドリルでデータを返すことについての情報を探しています。
をクエリで結果を返すためだ、あなたは右、サブ要素から 'configurationVariables'フィールドをドロップし、コンポーネントのリストを平らにしたいです?また、ドキュメントの例には表示されない、期待される出力には他にもいくつかのフィールドがあります。それらはすでにトップレベルにありますか?私が提供しようとしている答えはあなたのために "投影"を行うUDFです。あなたが示唆しているのは純粋なSQLで行うことができますが、JavaScript UDFはSQLを使用するよりもはるかに簡単にこれらの変換を行うことができます。 –
こんにちはラリー。投影された文書を修正しました。そして、はい、あなたは私が達成しようとしているものが正しいです。私はUDFを避けようとしています。私はアプリのスタートアップ時に同期させることを期待しているので、私はそれらを管理するための優れた戦略を持っていません。しかし、アプリは多数のマシンに配備されています。これは問題を引き起こす。 –
私のシステムには、ブートするたびにすべてのSprocsとUDFをリロードするマスターノードがあります。私はいつでもそれをするために何かを誘発することができます。しかし、あなたが本当にUDFを避けたいのであれば、私はあなたが求めていることをやる方法を知らない。だれかがそうするかもしれない。私はいくつかのSQLマスターがこれらの質問に答えるのを見ました。 –