1
이중 중첩 배열을 포함하는 큰 문서에서 배열의 병합 된 표현으로 프로젝트를 진행하려고합니다. 진행 방법이 고착되었습니다.DocumentDB Sub Query
: 나는 다음과 같은 쿼리를 사용하여 일부 성공을 거두었습니다{
"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")
그러나 각 구성 요소 유형에 대해 별도의 레코드가 반환됩니다. 모든 구성 요소가 포함 된 문서의 단일 인스턴스 내에 있도록 모든 요소를 함께 묶으려고합니다. 나는이 비슷한 나 외부 문서에 가입 할 수 있습니다 중첩 된 SELECT와 같은 무언가를 할 수 있기를 기대했다 :
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")
하지만이 유효하지 않습니다. 중첩 배열로 드릴링하여 하위/중첩 선택 및 반환 데이터에 대한 정보를 찾고 있습니다.
, 난 당신이 하위 요소에서'configurationVariables' 필드를 삭제하고 구성 요소 목록을 평평하게 할 질문을 이해를 잘 만들려면입니다 ? 또한 예상 출력에는 문서 예제에 나타나지 않는 여러 필드가 있습니다. 이미 최고 수준입니까? 내가 제공하려는 대답은 당신을 위해 "투영"을 할 UDF입니다. 나는 당신이 제안한 것이 순수한 SQL로 수행 될 수 있다고 생각하지만, JavaScript UDF는 SQL을 사용하는 것보다이 변환을 수행하는 훨씬 쉬운 방법이라는 것을 알았다. –
안녕 Larry. 투영 된 문서를 수정했습니다. 그리고 네, 당신은 내가 성취하고자하는 바를 정확히 알고 있습니다. 저는 UDF를 피하려고 애 쓰고 있습니다. 앱을 시작할 때 동기화 될 것으로 예상했기 때문에 관리하기에 좋은 전략이 없으므로 앱이 많은 수의 컴퓨터에 배포되므로 볼 수 있습니다. 이것은 문제를 일으킨다. –
부팅 할 때마다 모든 Sprocs 및 UDF를 다시로드하는 시스템에 마스터 노드가 있습니다. 나는 언제든지 그것을 할 수있는 어떤 것을 촉발시킬 수있다. 그러나 정말로 UDF를 피하려는 경우, 사용자가 묻는 것을 수행하는 방법을 모른다. 그러나 다른 누군가는 그렇게 할 수 있습니다. 일부 SQL 마스터가 이러한 질문에 대답하는 것을 보았습니다. –