Azure DocumentDb SELECT with JOIN不返回任何内容
DocumentDb中的我的文档如下所示:Azure DocumentDb SELECT with JOIN不返回任何内容,azure,azure-cosmosdb,Azure,Azure Cosmosdb,DocumentDb中的我的文档如下所示: { "id": 123, "timers": { "projectTimer": { "id": 234, "name": "My Project", "startTime": "10:35 AM" }, "taskTimer": { "id": 789, "name": "My Task", "
{
"id": 123,
"timers":
{
"projectTimer":
{
"id": 234,
"name": "My Project",
"startTime": "10:35 AM"
},
"taskTimer":
{
"id": 789,
"name": "My Task",
"startTime": "10:45 AM"
}
}
}
这里的要点是:
计时器是一个对象,而不是数组
还设置了子对象,即projectTimer和taskTimer
如果我将SELECT语句设置为以下值,则它会同时为我提供projectTimer和taskTimer子对象
SELECT c.timers
FROM Collection c
WHERE c.id = 123
但是下面的代码什么也不返回。我不明白为什么,因为这似乎是一个非常简单的连接:
SELECT t.projectTimer
FROM Collection c
JOIN t IN c.timers
WHERE c.id = 123
知道我哪里出错了吗?问题是,您试图在非数组的对象上进行连接 相反,如果您稍微修改了文档:
{
"id": "123",
"timers": [
{
"projectTimer": {
"id": 234,
"name": "My Project",
"startTime": "10:35 AM"
}
},
{
"taskTimer": {
"id": 789,
"name": "My Task",
"startTime": "10:45 AM"
}
}
],
}
然后,您就可以进行如下连接:
将返回阵列中的每个计时器:
[
{
"projectTimer": {
"id": 234,
"name": "My Project",
"startTime": "10:35 AM"
}
},
{
"taskTimer": {
"id": 789,
"name": "My Task",
"startTime": "10:45 AM"
}
}
]
请注意在查询中使用VALUE来去除包含的t变量。可能是因为在进行联接之前没有t.projecttimer?试着从集合c中选择c.id,在c.timers中加入t,其中c.id=123,看看这是否给了你一些东西,而我什么也没有得到。但我不清楚问题出在哪里。你能再详细一点吗?谢谢,我不是这方面的专家。我试着去适应这个:我实际上是在遵循那个例子中提到的规则。至少,我认为我在跟踪他们。也许我遗漏了什么。所以,只有当属性是数组时,JOIN才有效。这是正确的吗?正确-您实际上是在解开数组。非常有用的信息。非常感谢。我能够在不改变结构的情况下实现这一点:从集合c中选择c.timers.projectTimer,c.timers.taskTimer,其中c.id=123。不过,我很高兴我没有回答这个问题。再次感谢非常有用的指针!
[
{
"projectTimer": {
"id": 234,
"name": "My Project",
"startTime": "10:35 AM"
}
},
{
"taskTimer": {
"id": 789,
"name": "My Task",
"startTime": "10:45 AM"
}
}
]