azure-cosmosdb - 按子集合中的属性订购 Cosmos Db 集合
问题描述
我有以下类型的集合:
[
{
"id": "id1",
"Tracks": [
{
"id": "trackid1",
"Usage":
{
"Daily": "145",
"Ever": "21435"
}
},
{
"id": "trackid2",
"Usage":
{
"Daily": "3456",
"Ever": " 435676"
}
}
]
}
]
如何获取按降序排列的 Usage Ever 排序的前 100 条记录?
这样做的原因是我们试图以 100 个为一组进行检索,并希望首先列出使用最多的项目。
编辑 1
排序后,数据应如下所示:
[
{
"id": "id1",
"Tracks": [
{
"id": "trackid2",
"Usage":
{
"Daily": "3456",
"Ever": " 435676"
}
},
{
"id": "trackid1",
"Usage":
{
"Daily": "145",
"Ever": "21435"
}
}
]
}
]
解决方案
这将涉及使用ORDER BY
CosmosDb 不支持的子查询。我建议在数据库外部进行排序,但如果您真的热衷于在数据库方面进行排序,那么使用用户定义的函数在技术上是可行的。例如:
用户定义函数:
function sortByString(array, sortBy) {
return array.sort((a, b) => a[sortBy].localeCompare(b[sortBy]));
}
询问:
SELECT c.id, udf.sortByString(c.parents, 'givenName') as parents, c.children
FROM c
WHERE c.id = 'WakefieldFamily'
数据库入口:
{
"id": "WakefieldFamily",
"parents": [
{ "familyName": "Wakefield", "givenName": "Robin" },
{ "familyName": "Miller", "givenName": "Ben" }
],
"children": [
{
"familyName": "Merriam",
"givenName": "Jesse",
"gender": "female", "grade": 1,
"pets": [
{ "givenName": "Goofy" },
{ "givenName": "Shadow" }
]
},
{
"familyName": "Miller",
"givenName": "Lisa",
"gender": "female",
"grade": 8 }
],
"address": { "state": "NY", "county": "Manhattan", "city": "NY" },
"creationDate": 1431620462,
"isRegistered": false
}
推荐阅读
- android - 将两个数据类绑定到一个片段 - Android Kotlin
- algorithm - 查找 XOR 和为零的数组数量
- google-bigquery - 特殊组成员时的 BigQuery 数据集访问
- mongodb - mongo db 没有在 centos 7 上启动
- python - 是否有计算项目产品价值的循环?
- ios - Vapor 3.1.10 Xcode-11.3.1 编译问题
- javascript - 禁用除 IE 之外的所有浏览器的 HTML5 AppCache
- c - 如何从一个数组中找到每个分支的百分比?在 C 中(已回答)
- zk - 如何在 zk-calendar 中将任何日/周/月设置为默认视图?
- python - 迁移错误“OperationalError at /admin/accounts/userstripe/ no such table:accounts_userstripe”