2017-01-11 171 views
1

我无法查询DocumentDB中的嵌套对象。我无法控制数据的格式。比方说,一个物体看起来像这样在DocumentDB:DocumentDB查询嵌套对象

{ 
    "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' 
    

    一对夫妇的事情,我改变了:

    • JOIN必须对数组,而不是对象进行。对象可以使用“”操作员
    • 值是一个特殊的关键字进行扩展和失踪SCHEMA_ID