DocumentDB“全部/任何”功能
问题描述:
想象我有数据在宇宙DocumentDB“全部/任何”功能
[
{
"id": "FCEC01CD-A6E9-4DEA-8DD5-89711B5B05A1",
"sub": [
{
"id": 1,
"v": false
},
{
"id": 2,
"v": false
}
]
]
,我想查询所有的ID具有所有(sibbeling),具有V“子”项目=假 什么查询语法会工作? (ARRAY_CONTAINS不起作用,因为这会给出'任何'结果)
谢谢!
答
您需要一个用户定义的函数。
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)
谢谢,这肯定会工作。但不适用于我的动态CosmosDB SQL生成器,它可能没有授权将udf上传到Cosmos (在nuget ADCCure.Azure.Documents.OData.Sql中) –