gpt4 book ai didi

azure - CosmosDB 按值将结果排序到数组中

转载 作者:行者123 更新时间:2023-12-01 00:44:22 25 4
gpt4 key购买 nike

我有一些如下所示的 CosmosDB 文档

{
"ProductId": 1,
"Status": true,
"Code": "123456",
"IsRecall": false,
"ScanLog": [
{
"Location": {
"type": "Point",
"coordinates": [
13.5957758,
42.7111538
]
},
"TimeStamp": 201602160957190600,
"ScanType": 0,
"UserId": "1004"
},
{
"Location": {
"type": "Point",
"coordinates": [
13.5957907,
42.7111359
]
},
"TimeStamp": 201602161246336640,
"ScanType": 0,
"UserId": "1004"
}
]
}

如何通过 TimeStamp 属性对查询结果进行排序?我尝试过使用此查询

SELECT c.Code, b.TimeStamp FROM c JOIN b IN c.ScanLog ORDER BY b.TimeStamp

但我收到此错误

Order-by over correlated collections is not supported.

正确的做法是什么?

最佳答案

目前不支持使用 ORDER BY 进行 JOIN。

但是,这里有一个用户定义的函数(UDF)可以解决这个问题:

function sortScanLog (scanLog) { 
function compareTimeStamps(a, b) {
return a.TimeStamp - b.TimeStamp;
}
return scanLog.sort(compareTimeStamps);
}

您可以使用这样的查询:

SELECT c.ProductId, udf.sortScanLog(c.ScanLog) as ScanLog FROM c

如果您想要相反的排序顺序,只需交换 a 和 b 即可。因此,compareTimeStamps 内部函数的签名为:

function compareTimeStamps(b, a)

或者,您可以在返回结果后在客户端进行排序。

关于azure - CosmosDB 按值将结果排序到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35584755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com