我已经设置了一个CosmosDB实例,并将一个测试对象放入容器products中。分区键设置为/price。
{
"id": "1234",
"name": "A DB product",
"price": 12,
"_rid": "RsMLAID7jXIBAAAAAAAAAA==",
"_self": "dbs/RsMLAA==/colls/RsMLAID7jXI=/docs/RsMLAID7jXIBAAAAAAAAAA==/",
"_etag": "\"270011a1-0000-0200-0000-5e8c61ef0000\"",
"_attachments": "attachments/",
"_ts": 1586258415
}如果我阅读了容器的所有项目,我就会得到这个特定的项目:
const client = new CosmosClient(process.env.CosmosDbConnectionString);
const database = client.database("maindb");
const container = database.container("products");
const items = await container.items.readAll().fetchAll()这就是我在调试器中看到的:

如果我试图通过id获取相同的项,则将找不到该元素:
const item1 = await container.item("1234").read()这产生了:

使其工作的唯一方法是将读取的代码更改为:
const item1 = await container.item("1234", 12).read()这意味着我必须指定确切的分区键值,但是如果我只想通过ID查询呢?
发布于 2020-04-07 13:04:10
--这意味着我必须指定确切的分区键值,但是如果我只想通过ID查询呢?
是这样的。PartitionKey和id的组合唯一地标识文档。您可以在具有相同id的不同分区中拥有两个文档。
发布于 2020-04-10 03:01:48
@Krumelur
对于分区集合,在按ID读取项时必须提供分区键。对于非分区集合,不必提供分区键。
如果要按ID检索没有分区键的项,则可以使用items.query。这将返回查询中具有指定Id的所有项。如果ID是唯一的,您将只得到一个项目。请记住,该查询必须查看所有分区才能找到该项,因为您没有提供分区键。
https://stackoverflow.com/questions/61080346
复制相似问题