【发布时间】:2021-04-12 10:44:09
【问题描述】:
当存在多个具有相同 id 的嵌套项时,是否有办法在 CosmosDB 中的文档中查询嵌套对象:
{
id: "GUID",
"items"[
{
"item": {
"item_id": "123456",
"order_name": "name1"
},
"item": {
"item_id": "123456",
"order_name": "name2",
}
}]
}
我希望检查 item_id 并拉回 item 对象。使用查询SELECT c.item FROM c WHERE c.item.item_id = '123456' 仅在只有一个项目但有多个项目时才有效,查询不会返回任何内容。使用查询 SELECT * FROM c WHERE c.item.item_id = '123456' 也不会返回任何内容。
【问题讨论】:
-
我不确定我是否完全理解您的数据模型,因为您所展示的内容并没有真正起作用。您有两个
"item"子文档,每个子文档都具有完全相同的键名"item"。你能澄清一下吗?注意:如果将数据放入键中会给您带来困难的查询场景,我认为这是一种反模式。仅供参考,看看this answer 我不久前发布的,正是在谈论这个。 -
JSON中的key应该是唯一的:RFC-4627,那么你将如何访问不同的
items呢? -
因此,通过编辑:您仍然有相同的基本数据建模问题:您使用文字字符串(一些数据)作为您的键。这真的不是你应该做的事情。你甚至不需要那个键——你可以只包含你的子文档。或者,如果每个数组项有多个子文档,则可以为键设置一个属性,例如
item- 而不是字符串。
标签: sql azure-cosmosdb