Azure Cosmos文档数据库,可能有关系链接?

时间:2018-05-26 03:24:22

标签: database azure azure-cosmosdb

我有一个文档DB遵循以下粗糙的json结构:

{
    id: 32,
    Name: 'John',
    Occupation:{ 
        name: 'Programmer',
        hours: 40
    }
}

有没有办法让一个单独的文件集或类似职业可以涉及的东西?如:

{
    id: 32,
    Name: 'John',
    Occupation: 'jobs/JOB_PROGRAMMER_ID'
}

// jobs document collection
{
    id: 'JOB_PROGRAMMER_ID',
    name: 'Programmer',
    hours: 40
}

我可以写出一个后端查询功能,它会自动解决这些关系,但是想知道是否有一种内置的方法可以做到这一点。

2 个答案:

答案 0 :(得分:2)

可以使用Cosmosdb.Only就是没有多个集合,你需要嵌入一个集合中,如下所述。

  

关系数据库不是您可以创建的唯一地方   实体之间的关系。在文档数据库中,您可以拥有   一个文档中实际与其他数据相关的信息   文档。现在,我并不主张我们建立的一分钟   更适合Azure中的关系数据库的系统   Cosmos DB,或任何其他文档数据库,但简单的关系   很好,可以非常有用。

<强> Embedding documents

答案 1 :(得分:1)

您可以在文档中存储所需的任何类型的引用。但是,正如@gaurav在评论中提到的那样,您需要创建其他查询来跟踪这些关系(无论是在同一个集合中还是在不同的集合中)。

查询(以及存储过程)的范围限定为单个集合(更准确地说,是单个分区,尽管可以具有跨分区查询)。它们不能跨越多个集合;这取决于您解释您的引用(无论是路径,ID等),然后使用它作为后续查询的基础。

如果多个查询对您的解决方案不切实际,您需要设计一些其他方案(例如非规范化,您将在文档中存储相关数据的子集,作为子文档或子文档集合)。注意:对于嵌入式文档,如果嵌入文档的数量无限制(例如没有限制,如博客帖子的评论或回复推文),则存在超过最大文档大小的风险,这会破坏您的应用程序发生(除非你有替代逻辑用于存储超出单个文档大小限制的内容)。