当前位置: 首页 > 知识库问答 >
问题:

Azure Cosmos DB多类型文档查询

范翰池
2023-03-14

我正在尝试通过 SQL API 查询 Cosmos DB。我有一个简单的数据模型,其中包含同一容器中不同类型的文档(因为它们彼此相关),并且我正在为本教程之后定义文档类型的每个文档使用自定义类型键。以下是我的文档的外观:

document a:
{
   "id": 1,
   "b_id": 2,
   "c_id": 3,
   "foo": "bar",
   "type": "a"
}
document b:
{
   "id": 2,
   "baz": "qux",
   "type": "b"
}
document c:
{
   "id": 3,
   "quux": "quuz",
   "type": "c"
}

我知道连接synatx在Cosmos DB中不同,并且仅在同一文档中工作。我正在尝试找到一种方法来检索文档a及其所有属性从文档bc中检索:

{
   "id": 1,
   "foo": "bar",
   "baz": "qux",
   "quux": "quuz"
}

有可能以有效的方式吗?如果不是,我正在考虑在写入Cosmos之前对数据进行规范化。比如:

{
   "id": 1,
   "b" : { "baz": "qux" },
   "c" : { "quux": "quuz" }
}

但这样,我必须在每个文档中编写整个bc,而从容量的角度来看,似乎引用它们会使效率更高。

共有1个答案

时经纬
2023-03-14

这里的数据模型与这里的数据类型并不完全正确。通常只有在存在多对多关系时才引用数据。即使这样,每个文档只存储一个关系。在这里,使用数据模型检索相关数据的唯一方法是查询容器两次。

这里的数据是一对多(或一对几)的,从一个文档中引用多个文档。

在这些场景中,如果关系是一对几的,您可以或应该嵌入子项。如果它是一个相当大或无界的一对多,那么您应该对数据进行建模,以便您可以检索具有公共属性和值的所有相关项。

在您这里的场景中,如果这只是一小部分子文档,我会嵌入它们。然后,如果您对数据进行了建模,以便您知道数据的分区键和id,您可以使用点读ReadItemAsync()而不是使用查询来非常有效地检索此数据。这既超快又非常高效。

 类似资料:
  • 我有一个不那么独特的需求,但我只是找到了正确的术语来搜索,因为我只得到如何查询列表/数组字段或嵌套元素的结果。 提前感谢所有的帮助。

  • 问题内容: 我在C#项目中将ElasticSearch与NEST结合使用。我的用例包括多个具有不同文档类型的索引,到目前为止,我分别对其进行了查询。现在,我想实现一个全局搜索功能,该功能可以对所有现有索引,文档类型进行查询并正确地对结果进行评分。 所以我的问题是:如何使用NEST做到这一点? 当前,我正在使用该函数,但是如何定义多个索引? 也许是为了更好的理解,这是我想通过NEST实现的查询: T

  •   要支持多种文档类型,可以在CWinApp派生类对象中创建和注册附加的CMultiDocTemplate对象。在MFC应用程序中,要增加附加的文档类型,步骤可分为五步。下面我们试着将上一章的文本编辑器加到绘图程序中。这样程序不仅支持绘图,还支持文本编辑功能。 (1)使用ClassWizard创建新的文档类和视图类:   由于已经有了前面的文本编辑器程序,只需要将其中的文件拷贝过来就可以了,然后用

  • 问题内容: 我正在尝试在Elasticsearch上运行看起来像一个简单查询的内容,但似乎无法获得想要的结果。 这是我要做的简短示例: 我有一个新闻数据库。每条新闻都包含一个来源,一个标题,一个时间戳和一个用户。 我想要获得给定用户的每个可用来源的最新标题(基于时间戳)。 那么,例如,如何从约翰那里获得最后的CNN和最后的ESPN头条新闻? 我一直在研究多重搜索API,但这意味着我需要事先了解所有

  • 本文向大家介绍HTML和XHTML文档类型,包括了HTML和XHTML文档类型的使用技巧和注意事项,需要的朋友参考一下 为了验证HTML或XHTML的任何页面,您将需要一个doctype。这是一串文本,位于文档顶部,可告诉浏览器确切的标记标准已用于创建页面。 XHTML严格 当您不使用任何框架集或折旧标签时,此doctype将在XHTML文档中使用。 <!DOCTYPE html PUBLIC "

  • 我有一个只有2个文档的mongodb数据库。两者具有相同的结构: 小文档在消息中有0个对象,大文档有1000个。我数了数这两份文件上的标牌:小:28000大:450000 我使用nodeJS和常规mongodb驱动程序访问文档,并且我将索引设置为“general.sid”。 现在我要他们的将军提供文件。而且这两个文档的时间差别很大!我接收文档,进行一些计算并更新文档。 我打印接收和更新文档之前和之