Как получить значение свойства в этом запросе CosmosDB? - PullRequest
1 голос
/ 28 февраля 2020

Я пытаюсь углубиться в объект, но по какой-то причине он не работает в моем запросе Cosmos, запрос довольно прост, как показано ниже.

SELECT c.id,  
c.ItemNo, 
bv.variantId AS variantNo, 
bv.variantDescription AS title, 
c.BasicData.presentation.articleLongDescription[0] AS Description,
c.BasicData.presentation.articleCompositionList.origin,
bv.size.sizeName,
c.BasicData.asset.assets[0].locations[1].path
FROM c
JOIN bv IN c.BasicData.base.sales.variants
WHERE c.brand = 'XXX'
AND c.Consumer = 'XXX'
AND bv.variantId = 'XXX'
AND c.Season = 'XXX'

Результат довольно простой, так как следует

[
    {
        "id": "9c9c5b56-999f-4f98-8c52-902f43dd4cfe",
        "ItemNo": "0562168014",
        "variantNo": "0562168014003",
        "title": "Trousers Grey, 36",
        "Description": {
            "locale": "en-GB",
            "value": "jongel fibbel"
        },
        "origin": "{\"\":{\"materials\":{\"002elastane\":\"30.0\",\"002polyester\":\"70.0\"}}}",
        "path": "https://public.assets.XXX.com/assets/002/b0/1b/b01b4fa77023f48ca3c6ff8777cc27276f478f1e.jpg"
    }
]

Моя проблема в том, что я хочу вернуть свойство "value" "jongel fibbel" вместо всего объекта описания

Я попытался изменить

c.BasicData.presentation.articleLongDescription[0] AS Description,

To

c.BasicData.presentation.articleLongDescription[0].value AS Description,

Но это дает мне синтаксическую ошибку при значении

Как правильно вернуть значение в приведенном выше запросе?

EDIT ------ -

aricleLongDescription is an array as follows

"articleLongDescription": [
                {
                    "locale": "en-GB",
                    "value": "jongel fibbel"
                }
            ],

ТАК Я также попробовал JOIN следующим образом

SELECT c.id,  
c.ItemNo, 
bv.variantId AS variantNo, 
bv.variantDescription AS title, 
ba.value AS Description,
c.BasicData.presentation.articleCompositionList.origin,
bv.size.sizeName,
c.BasicData.asset.assets[0].locations[1].path
FROM c
JOIN bv IN c.BasicData.base.sales.variants
JOIN ba IN c.BasicData.presentation.articleLongDescription
WHERE c.brand = 'XXX'
AND c.Consumer = 'XXX'
AND bv.variantId = 'XXX'
AND c.Season = 'XXXX'

Но он также не работает с синтаксической ошибкой в ​​значении

EDIT ---

Также попытался выполнить подзапрос следующим образом

SELECT c.id,  
c.ItemNo, 
bv.variantId AS variantNo, 
bv.variantDescription AS title, 
--c.BasicData.presentation.articleLongDescription[0] AS Description,
-- ARRAY(SELECT serving.description FROM serving IN food.servings) AS servings
ARRAY(SELECT jongel.value FROM jongel IN c.BasicData.presentation.articleLongDescription) AS Description

c.BasicData.presentation.articleCompositionList.origin,
bv.size.sizeName,
c.BasicData.asset.assets[0].locations[1].path
FROM c
JOIN bv IN c.BasicData.base.sales.variants
JOIN ba IN c.BasicData.presentation.articleLongDescription
WHERE c.brand = 'XXX'
AND c.Consumer = 'XXX'
AND bv.variantId = 'XXX'
AND c.Season = 'XXX'

Но он также не работает с синтаксической ошибкой в ​​значении, мне интересно, является ли "value" защищенное ключевое слово или что-то в CosmosDB?

1 Ответ

2 голосов
/ 28 февраля 2020

Как выясняется, значение является зарезервированным ключевым словом в CosmosDB, поэтому синтаксис, который можно обойти, выглядит следующим образом

c.BasicData.presentation.articleLongDescription[0]["value"] AS Description,

Обратите внимание, что здесь нет (точка) только скобки и двойные кавычки

...