azure-cosmosdb - DocumentDB SQL,其中对象数组匹配字符串数组
问题描述
参考:带有 ARRAY_CONTAINS 的 DocumentDB SQL
问题:对于下面发生的事情是否有更好、更有效的查询?
在上述参考问题中,编写了 UDF 以检查数组中的对象是否与传入的字符串匹配。在这个变体中,我将一个字符串数组传递给 UDF。
现在我有一个工作O(N^2)版本,我希望 CosmosDB 有一个更有效的解决方案。
function ScopesContainsNames(scopes, names){
var s, _i,_j, _ilen, _jLen;
for (_i = 0, _ilen = scopes.length; _i < _ilen; _i++) {
for (_j = 0, _jLen = names.length; _j < _jLen; _j++) {
s = scopes[_i];
n = names[_j];
if (s.name === n) {
return true;
}
}
}
return false;
}
我的查询看起来像这样。
SELECT * FROM c WHERE udf.ScopesContainsNames(c.scopes, ["apples", "strawberries", "bananas"])
以下是我的文档的示例:
{
"scopes": [
{
"name": "apples",
"displayName": "3048b61e-06d8-4dbf-a4ab-d4c2ba0a8943/a"
},
{
"name": "bananas",
"displayName": "3048b61e-06d8-4dbf-a4ab-d4c2ba0a8943/a"
}
],
"enabled": true,
"name": "dc1e4c12-95c1-4b7f-bf27-f60f0c29bf52/a",
"displayName": "218aea3d-4492-447e-93be-2d3646802ac6/a",
"description": "4aa62367-7421-4fb6-88c7-2699c9c309dd/a",
"userClaims": [
"98988d5b-38b5-400c-aecf-da57d2b66433/a"
],
"properties": {
"437d7bab-a4fb-4b1d-b0b9-f5111d01882a/a": "863defc1-c177-4ba5-b699-15f4fee78ea5/a"
},
"id": "677d4a49-a46c-4613-b3f6-f390ab0d013a",
"_rid": "q6I9AOf180hJAAAAAAAAAA==",
"_self": "dbs/q6I9AA==/colls/q6I9AOf180g=/docs/q6I9AOf180hJAAAAAAAAAA==/",
"_etag": "\"00000000-0000-0000-1ede-f2bc622201d5\"",
"_attachments": "attachments/",
"_ts": 1560097098
}
解决方案
推荐阅读
- vba - 在更改一个单元格时,如何使用 vba 清除 Excel 表格中另一个单元格的内容。我还需要将逻辑扩展到该表中的整个列
- node.js - Mongoose 自定义虚拟字段返回承诺
- object-oriented-analysis - 结构化编程与面向对象编程
- python - Pandas 根据 Dataframe 中的所有唯一值对数据进行透视
- java - 错误的 Java 字符串连接
- bash - 是否有类似“超时”的功能可以跳过命令而不是杀死它?
- reactjs - 问题:路由器更改了 URL,但所有组件都没有呈现
- php - 在 WHM/Cpanel 上使用 PDO 连接到 SQL Server
- python - /bin/sh python 在运行 docker 基础映像时未找到错误
- excel - VBA 超链接到选项卡