CosmosDb 在子对象中查询
CosmosDb querying in sub-object
我正在尝试为我的 Azure CosmosDb 数据库中的特定用户查找具有“额外存储”高级包的帐户。这是我的 Account
对象的样子:
{
"id": 123,
"name": "My Account",
"members": [
{
"id": 333,
"name": "John Smith"
},
{
"id": 555,
"name": "Jane Doe"
}
],
"subscription": {
"type": "great-value",
"startDate": "2022-04-21T16:38:00.0000000Z",
"premiumPackages": [
{
"type": "extra-storage",
"status": "active"
},
{
"type": "video-encoding",
"status": "cancelled"
}
]
}
}
所以,我的查询条件(英文)是:
- 帐户必须包含“John Smith”(ID:333)作为成员
- 它必须在其
subscription
中包含“额外存储”高级包
我不确定我是否可以拥有多个 JOIN
,但这是我到目前为止没有结果的尝试:
SELECT c.id, c.name, s.premiumPackages.status
FROM c JOIN m IN c.members
JOIN s IN c.subscription
WHERE CONTAINS(m.id, 333)
AND CONTAINS(s.premiumPackages.type, "extra-storage")
知道如何使用“John Smith”的“额外存储”包获取帐户吗?
此查询应该会为您提供所需的信息。
SELECT c.id, c.name, premiumPackages.status
FROM c
JOIN (SELECT VALUE m FROM m IN c.members WHERE m.id = 333)
JOIN (SELECT VALUE s FROM s IN c.subscription.premiumPackages WHERE s.type
= "extra-storage") AS premiumPackages
在 Understanding how to query arrays in Azure Cosmos DB 上的这篇博客 post 有助于在尝试为数组编写查询时保留书签。
PS、Cosmos DB 根目录中的 id
必须是字符串,因此您的 "id": 123
应该是 "id": "123"
.
我正在尝试为我的 Azure CosmosDb 数据库中的特定用户查找具有“额外存储”高级包的帐户。这是我的 Account
对象的样子:
{
"id": 123,
"name": "My Account",
"members": [
{
"id": 333,
"name": "John Smith"
},
{
"id": 555,
"name": "Jane Doe"
}
],
"subscription": {
"type": "great-value",
"startDate": "2022-04-21T16:38:00.0000000Z",
"premiumPackages": [
{
"type": "extra-storage",
"status": "active"
},
{
"type": "video-encoding",
"status": "cancelled"
}
]
}
}
所以,我的查询条件(英文)是:
- 帐户必须包含“John Smith”(ID:333)作为成员
- 它必须在其
subscription
中包含“额外存储”高级包
我不确定我是否可以拥有多个 JOIN
,但这是我到目前为止没有结果的尝试:
SELECT c.id, c.name, s.premiumPackages.status
FROM c JOIN m IN c.members
JOIN s IN c.subscription
WHERE CONTAINS(m.id, 333)
AND CONTAINS(s.premiumPackages.type, "extra-storage")
知道如何使用“John Smith”的“额外存储”包获取帐户吗?
此查询应该会为您提供所需的信息。
SELECT c.id, c.name, premiumPackages.status
FROM c
JOIN (SELECT VALUE m FROM m IN c.members WHERE m.id = 333)
JOIN (SELECT VALUE s FROM s IN c.subscription.premiumPackages WHERE s.type
= "extra-storage") AS premiumPackages
在 Understanding how to query arrays in Azure Cosmos DB 上的这篇博客 post 有助于在尝试为数组编写查询时保留书签。
PS、Cosmos DB 根目录中的 id
必须是字符串,因此您的 "id": 123
应该是 "id": "123"
.