DocumentDb SELECT与子对象

时间:2017-02-10 03:50:54

标签: azure-cosmosdb

我的team对象如下所示,我正在尝试仅使用select语句获取成员。我遇到的问题是我得到的结果但是位置正在丢失,因为它没有映射到我的POCO对象,因为结果是“平坦的”。

我的team对象如下所示:

{
  id: 123,
  name: "My Team",
  members: [
     {
       id: 789,
       name: "John Smith",
       position: 
       {
          id: 444,
          name: "Manager"
       }
     },
     {
       id: 987,
       name: "Jane Doe",
       position: 
       {
          id: 222,
          name: "Director"
       }
     }
  ]
}

我的select语句如下所示:

SELECT m.id, m.name, m.position.id as positionId, m.position.name as positionName
FROM Teams t
JOIN m IN t.members
WHERE t.id = 123

所以,当我运行上面的select语句时,我得到的是我在下面显示的内容,并且成员的对象形状与我的POCO对象不匹配,因此位置信息消失。

[
  {
    id: 789,
    name: "John Smith",
    positionId: 444,
    positionName: "Manager"
  },
  {
    id: 987,
    name: "Jane Doe",
    positionId: 222,
    positionName: "Director"
  }

我的C#POCO对象的形状与JSON对象匹配。所以我在Member对象中有一个Position对象。

如何让成员获得他们在数据库中的确切形状?

更新: 我将select语句更改为以下内容,并且运行良好。它现在自动为我提供了POCO对象的确切形状。

SELECT m.id, m.name, m.position
FROM Teams t
JOIN m IN t.members
WHERE t.id = 123

1 个答案:

答案 0 :(得分:0)

我认为我之后更喜欢使用简单的DTO并将其映射到您的POCO(手动或使用自动播放器)。将DB控制的格式与您的应用程序使用的格式分开似乎是合理的。

另一个选择是查看http://www.newtonsoft.com/json/help/html/CustomJsonConverter.htm,但我发现它比专门的DTO和映射更复杂。