2017-01-11 2 views
1

У меня возникли проблемы с запросом вложенных объектов в DocumentDB. Я не контролирую формат данных. Допустим, объект выглядит в DocumentDB:Вложенный объект DocumentDB query

{ 
    "SCHEMA_ID": { 
     "PROJECT": "A", 
     "MODEL": "B", 
     "GUID":"A GUID" 
    }, 
    "STATE": { 
     "Active": "True" 
    }, 
    "OBJECTS": { 
     "OBJECT": [ 
      { 
       "ATTR_VALS": { 
        "NAME": "Header", 
        "ID": "0", 
        "VALUE": [ 
         { 
          "NAME": "JobId", 
          "VAL": "1011656" 
         }, 
         { 
          "NAM": "Region", 
          "VAL": "West Coast" 
         } 
        ] 
       } 
      }, 
      { 
       "ATTR_VALS": { 
        "NAME": "SampleData", 
        "ID": "0", 
        "VALUE": [ 
         { 
          "NAME": "Height", 
          "VAL": "5" 
         }, 
         { 
          "NAM": "Length", 
          "VAL": "3" 
         } 
        ] 
       } 
      } 
     ] 
    } 
} 

Я хочу, чтобы найти все объекты, которые имеют «ATTR_VALS» = «SampleData» и где эти элементы имеют «Высота» = 5

Так У меня есть:

SELECT test.GUID 
FROM test 
join OBJECTS in test.OBJECTS 
join OBJECT in OBJECTS 
join ATTR_VALS in OBJECT 
join VALUE in ATTR_VALS 
WHERE ATTR_VALS.NAME = 'SampleData' AND VALUE.NAME='Height' AND VALUE.VAL='5' 

Но это не сработает и не возвращает результатов. Благодаря!

+0

Вы получаете результаты при нажатии кнопки «Следующей страницы»? Некоторые запросы могут не возвращать результаты на первой странице (-ах), но возвращать результаты на последующих страницах. –

+0

@AravindRamachandran Я получаю 0 результатов назад. Я запускаю запрос в .net-коде. Аналогичный код без соединений возвращает данные в порядке (например, SELECT * FROM test WHERE test.GUID = 'GUID') – Jeremy

ответ

2

Запрос должен быть:

SELECT test.SCHEMA_ID.GUID 
FROM test 
join OBJ in test.OBJECTS.OBJECT 
join VAL in OBJ.ATTR_VALS["VALUE"] 
WHERE OBJ.ATTR_VALS.NAME = "SampleData" AND VAL.NAME='Height' AND VAL.VAL='5' 

Пару вещей я изменил:

  • РЕГИСТРИРУЙТЕСЬ должны быть выполнены с массивами, а не объектов. Объекты могут быть расширены с помощью оператора «»
  • VALUE специального ключевого слова и должны быть экранированы
  • Малой опечатки в пункте проекции отсутствующего SCHEMA_ID