Использование имени поля зарезервированного слова в DocumentDB

Я унаследовал базу данных, загруженную в DocumentDB, где имя поля - «Значение». Пример моей структуры:

{
...
   "Alternates": [
      "Type": "ID",
      "Value" : "NOCALL"
   ]
}

когда я запрашиваю (используя SQL documentDB), пытаюсь вернуть все документы, где Alternates.Value = "NOCALL", я получаю синтаксическую ошибку рядом с

Ошибка "значения"

. Если я запрошу Type = "ID",, все в порядке.

Кажется, что слово Value, имеющее особое значение в DocumentDB, вызывает проблему.

Использование знаков препинания (например, кавычек / двойных кавычек) вокруг "Value", похоже, не помогает.

Мы будем очень благодарны за любые предложения о том, как решить эту проблему!

Заранее спасибо!


person Alex Vilner    schedule 15.06.2015    source источник
comment
Вы пробовали квадратные скобки? Альтернативы. [Value] = NOCALL   -  person MartianCodeHound    schedule 15.06.2015
comment
да, у меня: синтаксическая ошибка, неправильный синтаксис рядом с '['.   -  person Alex Vilner    schedule 15.06.2015
comment
Точно такая же проблема для имени столбца Order   -  person SliverNinja - MSFT    schedule 28.08.2017


Ответы (2)


Ты прав. Значение - зарезервированное ключевое слово. Чтобы избежать этого, используйте синтаксис [""].

Итак, в вашем случае

«Альтернативы»: [«Тип»: «ID», «Значение»: «NOCALL»]

ВЫБРАТЬ c ИЗ c JOIN alt IN c.Alternates WHERE alt ["Значение"] = 'NOCALL'

person Ryan CrawCour    schedule 15.06.2015
comment
Спасибо, Рьянк, за это. Это сэкономило много времени на рефакторинге производительности моих сценариев автоматизации. Не могли бы вы также поделиться ссылкой, откуда вы узнали об этом трюке. - person Arpan Saini; 13.12.2019

В моем случае структура выглядит примерно так - {name: ABC, Value: 123}.

Я мог бы избежать зарезервированного ключевого слова, используя [] (как ответили другие) вместе с ‹source_name›, то есть

SELECT c [Value] FROM c - 123

Ссылка: Запросы в Azure Cosmos DB

person ak_01    schedule 26.05.2021