DocumentDB'全部/任何'功能

时间:2017-10-13 20:32:10

标签: azure-cosmosdb

想象一下,我有Cosmos中的数据

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

我希望查询所有包含所有(sibbeling)' sub' v = false的项目 什么查询语法可以工作? (ARRAY_CONTAINS不起作用,因为这会产生“任何结果”

谢谢!

1 个答案:

答案 0 :(得分: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)