2016-04-27 3 views
4

Во-первых, я сожалею, если этот вопрос звучит слишком глупо. Но я недавно изучаю N1QL и нуждаюсь в некотором выходе для моего утверждения. Мое имя ведра - MultiSiteResponseTime, и я пытаюсь получить результат всех часов, выполнив «select HourResponsetime.Hour из MultiSiteResponseTime;». Но я не получаю никакого результата. Из того, что я понял, если вы хотите получить доступ к внутренним элементам, тогда вы должны использовать его так: HourResponsetime.Hour, но я не уверен, где я ошибаюсь. Кроме того, если вы могли бы мне помочь в получении результата определенного ключа, например, я хотел бы знать результат ResponseTime настоящее Часовая 1.Доступ к внутренним элементам в Couchbase с N1QL

{ 
    "Para": "ResponseTime", 
    "Date": "18-04-2016", 
    "Qantas": { 
    "HourResponsetime": [ 
     { 
     "Hour": 0, 
     "ResponseTime": 8 
     }, 
     { 
     "Hour": 1, 
     "ResponseTime": 9 
     }, 
    ] 
    } 
} 

ответ

7

Это не является ни в виду глупый вопрос!

Синтаксис пунктирной линии «A.B» хорошо работает, когда A является JSON Object. Ваша структура документа содержит массив объектов в HoursResponseTime, поэтому он не работает. Путь к использованию - использовать селектор индекса массива со звездочкой: A[*].

Кроме того, синтаксис пути начинается с корня содержимого документа. Здесь у вас есть промежуточный объект Qantas, который вы должны сделать частью пути.

Это дает нам:

SELECT Qantas.HourResponsetime[*].Hour FROM MultiSiteResponseTime; 

Это должно возвращать массив Hour s для каждого документа.

+0

Большое спасибо Симон, я получаю желаемые результаты. Так что исправьте меня, если я ошибаюсь, мне нужно указать [*] asterix всякий раз, когда мне нужно получить доступ к содержимому массива. –

+0

Да, если вы хотите собрать значение одного атрибута для всех элементов массива. Вы также можете получить конкретный элемент, например. [3] –

Смежные вопросы