der*_*vil 0 c# azure-cosmosdb azure-cosmosdb-sqlapi
我在 Azure Cosmos DB 中有以下数据。我想根据between data.date和过滤数据contains employee.full_name。以下查询给出了不需要的结果。我真的需要帮助来解决这个问题。此链接如何使用 Cosmos DB 查询嵌套数组似乎不符合我的预期结果。
Cosmos DB 数据
{
"id": "ED-BSC1",
"data": [
{
"date": "2023-05-09",
"employees": [
{
"employee_id": "E3948",
"full_name": "Donni",
"loc": "Building F",
"floor": 5
},
{
"employee_id": "E9372",
"full_name": "Viona",
"loc": "Building F",
"floor": 5
},
{
"employee_id": "E4551",
"full_name": "Abby",
"loc": "Building A",
"floor": 6
}
]
},
{
"date": "2023-05-10",
"employees": [
{
"employee_id": "E9032",
"full_name": "Brian",
"loc": "Building A",
"floor": 12
},
{
"employee_id": "E9033",
"full_name": "Emma",
"loc": "Building A",
"floor": 11
},
{
"employee_id": "E9034",
"full_name": "Emily",
"loc": "Building A",
"floor": 11
}
]
},
{
"date": "2023-05-11",
"employees": [
{
"employee_id": "E1042",
"full_name": "Diana",
"loc": "Building C",
"floor": 14
},
{
"employee_id": "E5323",
"full_name": "Dereck",
"loc": "Building A",
"floor": 11
},
{
"employee_id": "E9034",
"full_name": "Emily",
"loc": "Building B",
"floor": 19
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在使用此查询来实现这一目标,但失败了。它仍然显示整个数据
SELECT
c.id,
c.data
from
c
join d in c.data
join e in d.employees
where
c.id = 'ED-BSC1'
and d.date >= '2023-05-10'
and d.date <= '2023-05-11'
and e.full_name like '%Em%'
Run Code Online (Sandbox Code Playgroud)
这是上面查询的预期结果
{
"id": "ED-BSC1",
"data": [
{
"date": "2023-05-10",
"employees": [
{
"employee_id": "E9033",
"full_name": "Emma",
"loc": "Building A",
"floor": 11
},
{
"employee_id": "E9034",
"full_name": "Emily",
"loc": "Building A",
"floor": 11
}
]
},
{
"date": "2023-05-11",
"employees": [
{
"employee_id": "E9034",
"full_name": "Emily",
"loc": "Building B",
"floor": 19
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我想根据
between data.date和过滤数据contains employee.full_name。以下查询给出了不需要的结果。
SELECT c.id,
ARRAY(
SELECT VALUE
{
"date": d.date,
"employees": ARRAY(
SELECT VALUE e FROM e IN d.employees
WHERE CONTAINS(e.full_name, "Em")
)
}
FROM d IN c.data WHERE d.date >= '2023-05-10' AND d.date <= '2023-05-11'
) AS data FROM c WHERE c.id = 'ED-BSC1'
Run Code Online (Sandbox Code Playgroud)
以下是期望的结果:
[
{
"id": "ED-BSC1",
"data": [
{
"date": "2023-05-10",
"employees": [
{
"employee_id": "E9033",
"full_name": "Emma",
"loc": "Building A",
"floor": 11
},
{
"employee_id": "E9034",
"full_name": "Emily",
"loc": "Building A",
"floor": 11
}
]
},
{
"date": "2023-05-11",
"employees": [
{
"employee_id": "E9034",
"full_name": "Emily",
"loc": "Building B",
"floor": 19
}
]
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |