2017-10-13 47 views
0

想象我有數據在宇宙DocumentDB「全部/任何」功能

[ 
    { 
     "id": "FCEC01CD-A6E9-4DEA-8DD5-89711B5B05A1", 
     "sub": [ 
      { 
       "id": 1, 
       "v": false 
      }, 
      { 
       "id": 2, 
       "v": false 
      } 
     ] 
] 

,我想查詢所有的ID具有所有(sibbeling),具有V「子」項目=假 什麼查詢語法會工作? (ARRAY_CONTAINS不起作用,因爲這會給出'任何'結果)

謝謝!

回答

1

您需要一個用戶定義的函數。

function arrayAllMatch(arr) { 
    for(i=0; i < arr.length; i++) { 
    if (arr[i].v === true) { 
     return false; 
    } 
    } 

    return true; 
} 

然後在查詢中調用(還包括ARRAY_CONTAINS,因爲它可以使用索引來減少調用的UDF數):

SELECT * 
FROM c 
WHERE ARRAY_CONTAINS(c.sub, {"v" : false }, true) 
AND udf.arrayAllMatch(c.sub) 
+0

謝謝,這肯定會工作。但不適用於我的動態CosmosDB SQL生成器,它可能沒有授權將udf上傳到Cosmos (在nuget ADCCure.Azure.Documents.OData.Sql中) –