带有JOIN的DocumentDb SELECT没有返回任何内容

时间:2017-03-06 06:29:27

标签: azure azure-cosmosdb

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

但以下内容均未返回。我不明白为什么,因为它似乎是一个非常简单的JOIN:

SELECT t.projectTimer
FROM Collection c
JOIN t IN c.timers
WHERE c.id = 123

知道我犯了哪个错误吗?

1 个答案:

答案 0 :(得分:0)

问题是你正在尝试对不是数组的东西进行JOIN

相反,如果您稍微重写了文档:

  {
    "id": "123",
    "timers": [
      {
        "projectTimer": {
          "id": 234,
          "name": "My Project",
          "startTime": "10:35 AM"
        }
      },
      {
        "taskTimer": {
          "id": 789,
          "name": "My Task",
          "startTime": "10:45 AM"
        }
      }
    ],
  }

然后你可以像JOIN一样:

select value t
from collection c
join t in c.timers
where c.id = "123"

哪个会返回数组中的每个计时器:

[
  {
    "projectTimer": {
      "id": 234,
      "name": "My Project",
      "startTime": "10:35 AM"
    }
  },
  {
    "taskTimer": {
      "id": 789,
      "name": "My Task",
      "startTime": "10:45 AM"
    }
  }
]

请注意在查询中使用VALUE来删除包含t变量的内容。