Azure CosmosDB / Nodejs-具有指定ID的实体在系统中不存在

问题描述

我正在尝试使用我的graphql / nodejs代码删除和更新cosmosDB中的记录,并出现错误-“系统中不存在具有指定ID的实体”。这是我的代码

deleteRecord: async (root,id) => {
  const { resource: result } = await container.item(id.id,key).delete();
  console.log(`Deleted item with id: ${id}`);
},

下面的代码以某种方式无法找到记录,即使“ container.item(id.id,key).read()”也不起作用。

await container.item(id.id,key)

但是,如果我尝试使用查询规范来查找记录,那么它会起作用

await container.items.query('SELECT * from c where c.id = "'+id+'"' ).fetchNext()

仅供参考-我能够提取所有记录并创建新项目,因此与数据库的连接和读/写不是问题。

那还能是什么?任何与此相关的指针都将有所帮助。

谢谢。

解决方法

似乎您将错误的密钥传递给了item(id,key)。根据此documentation的注释:

在“更新”和“删除”方法中,都必须选择该项 通过调用container.item()从数据库中获取。两个参数 传入的是项目的ID和项目的分区键。在这个 情况下,分区键是“类别”字段的值。

因此,您需要传递分区键的值,而不是分区键路径。 例如,如果您有如下文档,并且分区键为“ / category”,则需要使用此代码await container.item("xxxxxx","movie")

{
    "id":"xxxxxx","category":"movie"
}