json - 如何使用 Cosmos DB SQL 显示数组中的位置

标签 json azure azure-cosmosdb azure-cosmosdb-sqlapi

我在尝试从 Cosmos-db 中的文档数组中进行选择时遇到问题。 (SQL-api)

我可以从数组中选择值,但是我希望也能够显示数组中每个值的位置。

示例 JSON 文档:

{
    "Type": "SampleJSONMessage",
"Version": "1",
"Reference": "Test",
"DateTime": "2019-03-29T15:16:11.503Z",
"Configuration": {
    "MessageType": "1",
    "MessageConfig": "100",
    "Source": [
        {
            "Source": "Stream1"
        },
        {
            "Source": "Stream2"
        },
        {
            "Source": "Stream3"
        },
        {
            "Source": "Stream4"
        }
    ]
}
}

我执行这个:

从c中选择c.Configuration.Source

返回这个:

[
{
    "Source": "Stream1" 
},
{
    "Source": "Stream2"
},
{
    "Source": "Stream3"
},
{
    "Source": "Stream4"
}
]

这就是我想要显示的内容:

[
{
    "Source": "Stream1" ,
    "Position": "1"
},
{
    "Source": "Stream2",
    "Position": "2"
},
{
    "Source": "Stream3",
    "Position": "3"
},
{
    "Source": "Stream4",
    "Position": "4"
}
]

感谢任何帮助!

最佳答案

虽然specific index每个数组元素都存储在 CosmosDB 中,SQL API 目前没有直接访问它的方法。不过,用户定义的函数也可以工作。

这是我添加到我的集合中的 UDF:

function ADD_INDEX(array){
    array.forEach(function(item, index){item.Position = index.toString()});
    return array;
}

修改后的查询使用它来获取您想要的输出:

select udf.ADD_INDEX(c.Configuration.Source) AS Source from c

关于json - 如何使用 Cosmos DB SQL 显示数组中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56574062/

相关文章:

mysql - 我可以将 Laravel JSONWhere 子句与 MariaDB 10.2.16 LongText 列一起使用吗?

c# - 错误 CS0433 : The type 'JsonValue' exists in both 'System.Json, Version=2.0.5.0' and 'Xamarin.Auth' (CS0433)

sql - 当我减小半径时,为什么针对 SQL Azure 中的空间索引的空间查询需要更长的时间?

azure - 将调试器附加到角色实例时出错

node.js - 文档数据库 : Coldfusion Returning 401 Authorization error

c++ - 将 OpenCV Mat 转换为数组(可能是 NSArray)

javascript - 从 JSON 创建内容与数据库 - 效率

Azure Pipelines 如何以及在何处更改代理规范

azure - 如何使用 Azure 函数 Cosmos DB 触发器更新集合中的文档?

c# - 如何确保 Cosmos DB 中属性的唯一性