Azure DocumentDb SELECT with JOIN不返回任何内容

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", "

DocumentDb中的我的文档如下所示:

{
  "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"
    }
  }
]